3

使用实体框架和代码优先,是否可以让它创建和使用没有主键的表?我无法让这个设置工作:

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

4

2 回答 2

1

如果仍有唯一标识行的方法,EF 可以支持没有 PI 的表,如果没有适当的 PK,它无法推断唯一标识符。也就是说,对EF撒谎,说有PK,比如on Reportand Changed

于 2010-11-01T13:06:43.613 回答
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 在内部唯一地指向一行。

于 2013-09-02T17:09:44.623 回答