使用Entity Framework和Code First,是否可以让它创建和使用没有主键的表?我无法使用此设置:
public class Report
{
public virtual int ReportId
public virtual ICollection<ReportChanges> ReportChanges
}
public class ReportChanges
{
public virtual Report Report
public virtual string EditorName
public virtual DateTime Changed
}
请注意,我已排除在ReportChanges中分配主键。但是通过这个设置,我得到:“无法推断实体类型'ReportChanges '的密钥。”
要么我缺少某些东西,要么Code First不支持没有主键的表。什么是正确的? 感谢。
答案 0 :(得分:1)
如果仍然有一种唯一标识行的方法,EF可以支持没有PI的表,但是如果没有适当的PK,它就无法推断出唯一标识符。换句话说,骗取EF,并说在Report
和Changed
上有一个PK。
答案 1 :(得分:1)
EF需要一种方法来跟踪自己的内部变化。这是一个代码示例,以帮助其他人用Google搜索:
public class YourDataContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ReportChanges>().HasKey(x => new {x.Report, x.Changed});
}
}
“new {x.Report,x.Changed}”会创建一个假的复合键,允许EF在内部唯一地指向一行。