EntityType'x'没有定义键,在Code First中重用DB First

时间:2014-07-23 12:12:28

标签: entity-framework ef-code-first ef-database-first

我有一个名为' Authority'在由Database First方法创建的库中

正如我们所知,Database First会自动生成所有类,并为每个类定义主键, 我还创建了“用户”#39; class有一个Authority类的属性,在另一个库中我有' PacsUser'来自'用户'我正在使用代码优先方法来开发PacsUser' 当我希望PacsUser返回特定用户时,它会给我" EntityType' Authority'没有键定义"

我必须在PacsUserDBContext的OnModelCreating中为Authority类定义键,如:

modelBuilder.Entity<Authority>().HasKey(e => e.AID);

为什么PacsUserDBContext中的DbModelBuilder会自动识别授权主键?或至少通过

modelBuilder.Entity<Authority>().ToTable("Authority");

一切正常(仅举例)。

他们俩(授权托架DB-First和PacsUser代码优先)正在使用实体框架ORM所以

为什么Code首先不知道授权主键?

DbModelBuilder是否有办法自动识别主键?

任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

  

主要关键会议     Code First推断,如果类上的属性名为“ID”(不区分大小写),或者类名后跟“ID”,则属性是主键。如果主键属性的类型是数字或GUID,则它将被配置为标识列。

例如,如果您有以下课程

public class Department 
{ 
   // Primary key 
   public int DepartmentID { get; set; } 

    . . .  

}

EF将使用DepartmentID作为主键,您可以使用Id代替DepartmentID。 但是您的Authority类的密钥(AID)不符合上述约定。因此您必须为其定义自定义映射,或将AID更改为IdAuthorityId

您可以看到更多默认的EF约定here