【问题标题】:Entity Framework: mix table per type and table per hierarchy实体框架:每个类型混合表和每个层次结构表
【发布时间】:2011-03-03 10:54:53
【问题描述】:

我的数据库中有两个表:

  • 基础实体
  • 基金

“Fund”实体继承自“BaseEtity”,具有“每种类型的表”。

在我的商业模式中,我有不同类型的“基金”:

  • 总基金
  • 直接投资基金

我希望为具有“每个层次结构的表”的这些类型设置不同的实体,这意味着我仍然只有一个带有类型鉴别器列的“基金”表。

有没有办法在派生自具有“每个类型的表”的基类的实体上拥有“每个层次结构的表”?

【问题讨论】:

    标签: entity-framework inheritance


    【解决方案1】:

    是的,有可能 - 我已经在 EF4 中使用了一段时间。

    Define EntityA and map to TableA
    
    Define EntityB: EntityA and map to TableB
    
    Define EntityC: EntityA and map to TableC
    
    Define EntityD: EntityC and map to TableC
        with condition on a column from table C
    
    Define EntityE: EntityC and map to TableC
        with a different condition on a column from table C
    

    【讨论】:

    • 您是否为此使用代码优先?我正在使用模型优先和 EF 设计器。
    • @SolarX,如果您真的首先使用模型而不是数据库,EF 将创建 SQL 脚本,根据表类型映射约定创建表。我认为您实际上也是首先使用数据库(映射到现有表,而不是从 edmx 创建新表),然后将初始模型重塑为您希望它工作的方式。
    • 您是从模型创建表,还是将模型映射到现有表,或者两者兼而有之?无论您采用哪种方式,这种映射都是可能的。
    • 正如我所说,我首先使用模型。因此,我从模型中创建表格(并且仅限这种方式)。
    • 该问题并未说明您是从实体生成表(纯模型优先)。所选答案与您无关(也处理 db-first),并且通常这种映射是可能的,无论您以哪种方式工作,在模型优先中,您只需要修改创建表的 T4(您可以拥有它阅读设计人员为实体提供的文档字段,以决定生成哪种继承表。留下不正确的接受答案只会导致对 EF 的更多误解。
    【解决方案2】:

    【讨论】:

    • 我之前看到过这个帖子,但我想保持希望并再次询问:) 也许有人想出了一个解决方案。
    • 那篇文章展示了一个不同的、更复杂的场景。这是可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    相关资源
    最近更新 更多