2011-01-05 55 views
5

當使用「EF-Code First」時,我得到一個ModelValidationException(在底部)。它想讓我來定義鍵,但我不知道到底是什麼意思?如何在使用「EF-Code First」時定義密鑰?

public class Unit 
{ 
    Guid id; 
    String public_id; 
    String name;   
    bool deleted; 
} 

public class MyDataContext : DbContext 
{ 
    public DbSet<Unit> Units { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Unit>().ToTable("sometable"); 
    } 
} 

[TestFixture] 
public class DataTests 
{ 
    [Test] 
    public void Test() 
    { 
     MyDataContext database = new MyDataContext(); 
     var o = database.Units; 


     Console.WriteLine(o.Count()); // This line throws! 
     Assert.IsTrue(true); 
    } 
} 

System.Data.Entity.ModelConfiguration.ModelValidationException:模型生成過程中檢測到一個或多個驗證錯誤:

System.Data.Edm.EdmEntityType :: EntityType'Unit'沒有定義鍵。定義此EntityType的關鍵字。

System.Data.Edm.EdmEntitySet:EntityType:EntitySet單位基於沒有定義鍵的類型Unit。

回答

3

您需要使用屬性,而不是私有局部變量的所有字段,你想EF來創建數據庫字段。

Public Guid Id {get;設置;}

8

讓你的域的屬性,然後使用[Key]屬性是這樣的:

[Key] 
public Guid MyId { get; set; } 

您必須引用和進口System.ComponentModel.DataAnnotations得到KeyAttribute。 More info can be found here

+1

EF會自動將具有後綴「Id」(注意小寫'd')的屬性歸類爲鍵。最好遵循約定,而不是手動將字段歸爲鍵。 – Charlie 2012-08-16 16:54:53

0

如果您使用列名作爲 ,則不使用[鍵] public guid UnitID {get;組;那麼EF會將此列視爲關鍵列。

相關問題