【问题标题】:Code first Sharing Primary Key between tables代码优先在表之间共享主键
【发布时间】:2017-02-10 10:52:16
【问题描述】:

我首先使用实体​​框架代码尝试创建一个数据库,其中我有几个共享唯一主键的表。

我的域类具有以下结构,并希望将 FirstClass、SecondClass、ThirdClass 都创建为链接到存储共享密钥的 BaseTable 的表。我在这个例子中包含了 SharedClass 类,因为我的项目中也有这个结构。

[Table("BaseTable")]
public abstract class BaseClass {
    public int Id { get; set; }
}

public abstract class SharedClass : BaseClass {
    public string SharePropertyOne { get; set; }
    public string SharePropertyOne { get; set; }
}

[Table("FirstClass")]
public abstract class FirstClass : SharedClass {
    public string SharePropertyOne { get; set; }
    public string SharePropertyOne { get; set; }
}

[Table("SecondClass")]
public abstract class SecondClass : SharedClass {
    public string SharePropertyOne { get; set; }
    public string SharePropertyOne { get; set; }
}

[Table("ThirdClass")]
public abstract class ThirdClass : SharedClass {
    public string SharePropertyOne { get; set; }
    public string SharePropertyOne { get; set; }
}

目前发生的情况是,FirstClass、SecondClass 和 ThirdClass 都在创建中,但都有自己的主键,并且没有创建 BaseTable。

在查看了这里提出的几个类似问题后,我不确定我是否遗漏了什么。

【问题讨论】:

  • 您能否显示在您的 DbContext 中定义的相关 DbSet 以及流畅的配置(如果有)。
  • 所以我在上下文中没有上述类作为 DbSet,因为它们都不是聚合路由,也没有 Fluent API 配置。

标签: c# asp.net sql-server entity-framework ef-code-first


【解决方案1】:

默认情况下不会激活 EF 继承,即使在基类上应用 Table 数据注释也是如此。

可以通过将DbSet 添加到派生的DbContext 来激活它:

public DbSet<BaseClass> BaseClass { get; set; }

这还允许您使用多态查询,或使用流畅的配置 - 所需的最低要求是:

modelBuilder.Entity<BaseClass>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2013-11-27
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多