2011-01-05 6 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:1つのまたは複数の検証エラーがモデルの生成中に検出されました:

System.Data.Edm.EdmEntityType :: EntityType 'Unit'にはキーが定義されていません。このEntityTypeのキーを定義します。

System.Data.Edm.EdmEntitySet:EntityType:EntitySet Unitsは、キーが定義されていない型Unitに基づいています。

答えて

3

EFでデータベースフィールドを作成するすべてのフィールドには、プライベートローカル変数ではなくプロパティを使用する必要があります。

パブリックGuid Id {get;セット;}

8

があなたのフィールドのプロパティを作成し、その後、このような[Key]属性を使用します。あなたはKeyAttributeを取得するためにSystem.ComponentModel.DataAnnotationsを参照し、インポートする必要があります

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

を。 More info can be found here

+1

EFは自動的にプロパティを接尾辞 "Id"(小文字の 'd'に注意)でキーとして分類します。手動でフィールドをキーとして帰属させる代わりに、規約に従うことが最善です。 – Charlie

0

[Key]を使用せずに、列名を として使用する場合は、public GUID UnitID {get;セット; } この場合、EFはこの列をキー列と見なします。

関連する問題