C# 带鉴别器的多对多-无继承

C# 带鉴别器的多对多-无继承,c#,entity-framework-6,C#,Entity Framework 6,我至少有四个这样的实体 public class Item { public int ItemID { get; set; } public ICollection<Price> Prices; . . . . } public class OtherThing { public int ThingID { get; set; } public ICollection<Price> Prices; . . . . }

我至少有四个这样的实体

public class Item {
    public int ItemID { get; set; }
    public ICollection<Price> Prices;
    . . . . 
}


public class OtherThing {
    public int ThingID { get; set; }
    public ICollection<Price> Prices;
    . . . . 
}
目标是能够获得一个
Set()
Set()
,并以正确的价格对价格进行调整

一个想法是制作一个ItemPrice表和一个OtherThingPrice表,但是这些表是相同的,并且会一起改变,所以这个想法被抛弃了

另一个想法是使用TPH,但Price不是这四个+表的基类,因此它在语义上似乎是错误的,我甚至不确定它是否会工作(会吗?)

我们的想法是这样做:

public class PriceMap : EntityTypeConfiguration<Price>
{
    public PriceMap()
    {
        Map<Item>(m => m....);
        Map<OtherThing>(m => m....);
    }
}

那么遗产呢:好吧,物品、其他东西、东西等等都不是价格类型。从技术上讲,它们不是一种相关的东西,除了它们都与价格有很多关系这一事实。因此,为什么标题说“无继承”,单独的隐式链接表有什么问题?EF将为您自动维护它们(不需要特殊的中间实体)。如果
其他东西
等没有公共基础实体(表),这是最简单的。嗨,伙计,一点问题都没有:)(1)它不一定需要。仅在其他实体端(如
modelBuilder.entity.HasMany(e=>e.Prices).WithMany();
等),与导航属性的关联可能是单向的。(2)如果在某个时候需要,这可能是个问题。您可以通过投影公共数据来执行一些手动联合查询,但这将是一个难题。因此,如果您需要类似的内容,最好引入一个公共基础实体,如
PriceableEntity
(:-),统一PK和其他公共属性名称,并使用TPH或TPT。@IvanStoev明白了。只是一个占位符基类,除了Price的关系信息外没有其他内容。我喜欢选项1,并将推动承认,你永远不需要从一个价格到一个项目或其他东西(在我们的情况下)。
public class PriceMap : EntityTypeConfiguration<Price>
{
    public PriceMap()
    {
        Map<Item>(m => m....);
        Map<OtherThing>(m => m....);
    }
}
EntityToPriceTable
    EntityToPriceID
    EntityID
    EntityType
    PriceID