我有一个继承层次结构,其中有一个基本的Employee实体和一些特定员工类型的子类实体。我需要能够将基本的Employee实体转换为更具体的实体(例如TemporaryEmployee),并从更具体的类型转回到基本类型(例如,如果员工不再是“临时”的,则希望该实例仅作为Employee持久化。
在数据库中,这只是在特定子类的表中添加或删除行的问题。(我正在使用按类分表)但我没有看到如何使用EF调用来完成此操作。
我有一个继承层次结构,其中有一个基本的Employee实体和一些特定员工类型的子类实体。我需要能够将基本的Employee实体转换为更具体的实体(例如TemporaryEmployee),并从更具体的类型转回到基本类型(例如,如果员工不再是“临时”的,则希望该实例仅作为Employee持久化。
在数据库中,这只是在特定子类的表中添加或删除行的问题。(我正在使用按类分表)但我没有看到如何使用EF调用来完成此操作。
今天早上我偶然看到了这篇博客文章,这可能会给你更多的思考启示。
编辑补充 如果你通过实现数据库存储过程来解决这个问题,请确保在执行时没有人正在使用系统。因为在.NET对象空间中,这是完全非法的,Entity Framework认为这是不可能发生的。如果你绕过Entity Framework并这样做,并且用户恰好在此时有一个活动的ObjectContext,则该ObjectContext将与数据库不同步,而Entity Framework中的正常乐观并发保护无法检测到这种情况。你不会破坏数据,但具有活动ObjectContext的用户可能会看到一些极其奇怪的错误。
从技术上讲,您可以通过使用存储过程来实现。TPT不支持此功能。
然而,我完全同意Craig的观点。在经典编程书籍《设计模式》(Addison-Wesley Professional)中,作者讨论了继承与组合,并得出结论应该“优先选择组合而非继承”。