在使用“EF-Code First”时如何定义键?

时间:2011-01-05 10:20:42

标签: asp.net entity-framework c#-4.0 code-first

使用“EF-Code First”时,我得到一个ModelValidationException(在底部)。它要我定义一个Key,但我不确定它到底是什么意思......

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 Units基于没有定义键的类型Unit。

3 个答案:

答案 0 :(得分:8)

制作字段属性,然后使用[Key]属性,如下所示:

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

您必须引用并导入System.ComponentModel.DataAnnotations以获取KeyAttribute。 More info can be found here

答案 1 :(得分:3)

您需要为希望EF为其创建数据库字段的所有字段使用属性,而不是私有局部变量。

Public Guid Id {get;设置;}

答案 2 :(得分:0)

如果您使用列名,则不使用[Key]    public Guid UnitID {get;组; } 然后EF将此列视为关键列。