Asp.net 使用“时如何定义键?”;EF代码优先;?

Asp.net 使用“时如何定义键?”;EF代码优先;?,asp.net,entity-framework,c#-4.0,code-first,Asp.net,Entity Framework,C# 4.0,Code First,当使用“EF代码优先”时,我得到一个ModelValidationException(在底部)。它想让我定义一个键,但我不确定它的确切含义 public class Unit { Guid id; String public_id; String name; bool deleted; } public class MyDataContext : DbContext { public DbSet<Unit> Units { g

当使用“EF代码优先”时,我得到一个ModelValidationException(在底部)。它想让我定义一个键,但我不确定它的确切含义

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);
    }
}
公共类单元
{
Guid id;
字符串public_id;
字符串名;
删除bool;
}
公共类MyDataContext:DbContext
{
公共数据库集单元{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity().ToTable(“sometable”);
}
}
[测试夹具]
公共类数据测试
{
[测试]
公开无效测试()
{
MyDataContext数据库=新建MyDataContext();
var o=数据库单位;
Console.WriteLine(o.Count());//这行抛出!
Assert.IsTrue(真);
}
}
System.Data.Entity.ModelConfiguration.ModelValidationException:在模型生成过程中检测到一个或多个验证错误:

System.Data.Edm.EdmEntityType::EntityType“Unit”未定义键。定义此EntityType的键

System.Data.Edm.EdmEntitySet:EntityType:EntitySet单位基于未定义键的类型单位


对于要为其创建数据库字段的所有字段,都需要使用属性,而不是私有局部变量


公共Guid Id{get;set;}

使字段具有属性,然后像这样使用
[Key]
属性:

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

您必须引用并导入System.ComponentModel.DataAnnotations以获取KeyAttribute

如果将列名用作 公共Guid UnitID{get;set;}
然后EF将此列视为键列。

EF将自动将后缀为“Id”(注意小写字母“d”)的属性分类为键。最好遵循惯例,而不是手动将字段属性设置为键。