Code First CTP4:没有主键的表?

时间:2010-11-01 12:39:45

标签: .net entity-framework code-first ctp4

使用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不支持没有主键的表。什么是正确的? 感谢。

2 个答案:

答案 0 :(得分:1)

如果仍然有一种唯一标识行的方法,EF可以支持没有PI的表,但是如果没有适当的PK,它就无法推断出唯一标识符。换句话说,骗取EF,并说在ReportChanged上有一个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在内部唯一地指向一行。