【问题标题】:Code First CTP4: Table with no primary key?Code First CTP4:没有主键的表?
【发布时间】:2011-05-03 09:45:00
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案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 在内部唯一地指向一行。

    【讨论】:

      【解决方案2】:

      如果仍有方法来唯一标识行,EF 可以支持没有 PI 的表,但是它无法在没有正确 PK 的情况下推断唯一标识符。也就是说,对EF撒谎,说有PK,比如ReportChanged

      【讨论】:

        猜你喜欢
        • 2011-05-06
        • 1970-01-01
        • 1970-01-01
        • 2011-04-30
        • 2015-06-25
        • 1970-01-01
        • 1970-01-01
        • 2014-01-20
        • 1970-01-01
        相关资源
        最近更新 更多