我有一个名为' 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是否有办法自动识别主键?
任何想法都会受到赞赏。
答案 0 :(得分:1)
主要关键会议 Code First推断,如果类上的属性名为“ID”(不区分大小写),或者类名后跟“ID”,则属性是主键。如果主键属性的类型是数字或GUID,则它将被配置为标识列。
例如,如果您有以下课程
public class Department
{
// Primary key
public int DepartmentID { get; set; }
. . .
}
EF将使用DepartmentID
作为主键,您可以使用Id
代替DepartmentID
。
但是您的Authority
类的密钥(AID
)不符合上述约定。因此您必须为其定义自定义映射,或将AID
更改为Id
或AuthorityId
。
您可以看到更多默认的EF约定here