【问题标题】:MS EntityFramework: how to split entity with inheritance? Using of discriminatorMS EntityFramework:如何通过继承拆分实体?鉴别器的使用
【发布时间】:2011-10-20 09:53:45
【问题描述】:

我在数据库中有表名 Transaction。我想要 2 个子类 TransactionA 和 TransactionB。我已经按照这里的描述做到了:http://www.robbagby.com/entity-framework/entity-framework-modeling-table-per-hierarchy-inheritance/comment-page-1/#comment-607

问题是我需要在这里使用判别器字段(参见示例,那里是 PersonCategory)。但是必须删除之后我不能使用它。

如何解决这个问题? 谢谢

【问题讨论】:

    标签: entity-framework inheritance mapping


    【解决方案1】:

    如果它是一个鉴别器,它唯一的用途是将记录映射到TransactionATransactionB。不能在应用程序中设置。如果插入TransactionA 实例或TransactionB 实例并记录,则会设置它。它也无法更新,因为一种类型的对象无法更改为另一种类型的对象 - 如果您需要这样的逻辑,您不能将其建模为继承。

    【讨论】:

    • 我既不想设置也不想更新。我只需要显示价值。为什么我不能这样做?如果我真的不能向用户展示它的价值?
    • 只是你不能。那是实体框架内的限制。如果您想显示值,只需测试实体的类型并显示相应的值。
    • 对不起,不明白你的“只是测试实体的类型并显示相应的值”。这是什么意思?
    • if (entity is TransactionA) value = "abc" 这样的东西,因为这正是假定的用法——你使你的映射面向对象,所以表现得像那样。
    【解决方案2】:

    是的,它用作 EF 帮助器来识别对象特定类型的类型。一个缺点是该方法是每个字段都应该是可为空的字段,并且表未标准化。但是,不涉及任何连接,因此这是一种快速方法。每种类型的表是相对较好的方法,您有两个类 TransactionA 和 TransactionB 以及称为 Transaction 的通用类。尽管因此您必须进行连接,但与早期方法相比,性能并不是那么好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 2019-05-09
      相关资源
      最近更新 更多