繁体   English   中英

EF代码优先:对继承的类型进行非规范化

[英]EF Code First: Denormalize Inherited Type

我有以下实体:

Human

-Name

-Age

-Height

-Weight
SuperHuman : Human

-SuperPower

EF将仅使用Power属性创建SuperHumans表,并在查询时联接到Humans表。 我想要SuperHumans表上的所有列。

可以将EF 4.1 Code First配置为执行此操作吗?

不会使人的局部工作? 如果那行不通,请查看“每个层次的表”,“每个类型的表”与“每个具体表”(TPH,TPT,TPC)。 您当前正在使用TPT,并且需要TPC。

一种方法是使关系具有Has-a关系而不是Is-a关系。

public class SuperHuman
{
    public Human TheHuman { get; set; }
    public string SuperPower { get; set; }
}

生成的数据库表应具有Human和SuperHuman的所有字段(只要您没有单独的Human表,在这种情况下,将创建一个单独的Human表,并添加外键以将这些表链接在一起)

它的用途有限,因为它破坏了继承。 您可能会找到更好的解决方案。


编辑:您可以做这样的事情:

public class SuperHuman : Human
{
    public string Name 
    { 
        get { return base.Name; } 
        set { base.Name = value; } 
    }
}

注意:这未经测试,可能不是最佳解决方案。 我将其包括在这里只是一种可能的解决方案。

我只需要配置SuperHuman即可映射继承的属性,如下所示:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<SuperHuman>().Map(m => m.MapInheritedProperties());
    {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM