我有一个继承层次结构,其中包含一个基本的Employee实体和一些用于特定员工类型的后代实体.我需要能够将基础Employee实体转换为更具体的实体(例如TemporaryEmployee),并从更具体的类型转换回基本类型(例如,如果员工不再是"临时"的话,那么我希望该实例只是持久化为Employee.在DB中,这只是在表中为特定子类添加或删除一行的问题.(我每个类都使用表.)虽然我没有看到如何使用EF调用.
我有一个简单的层次结构
public abstract class CommunicationSupport
{
public SupportTypeEnum Type { get; set; }
public Country Origin { get; set; } // National or Foreign support
}
public class TelecomSupport : CommunicationSupport
{
public string Number { get; set; }
}
public class PostalSupport : CommunicationSupport
{
public Address Address { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我计划为我的数据库使用Table-per-type层次结构.因此将创建3个表,一个基数和两个子项使用与基础相同的PK.
我的问题是我希望能够通过更改它的类型来更新CommunicationSupport.假设我创建了一个TelecomSupport,将其保存,然后将其类型更改为PostalSupport并再次保存(更新).我期望的结果是EF保持相同的基本记录(CommunicationSupport Id),但删除TelecomSupport表中的记录并在PostalSupport中创建一个新记录.因此,TelecomSupport和PostalSupport是独家的,不能共享相同的基础CommunicationSupport.
我如何使用EntityFramework 5来做到这一点?
谢谢你的帮助!
我看到这里有一个类似的问题,但我认为不是很清楚所以我正在创建另一个:实体框架:继承,更改对象类型
我有一个继承自实体人的实体学生.
在某些时候,一个人可以成为一名学生.
在没有存储过程或创建新实体的情况下,实体框架4中是否有任何方法可以处理此问题.
我已经找到了一些有关这方面的信息,但还不足以让我理解这种情况的最佳实践.我有你的典型TPH设置与抽象基类"公司".我有几个孩子"小公司","大公司"等继承自公司.实际上,我实际上对公司有不同的现实分类,但我试图在这个例子中保持简单.在根据TPH的数据库中,我有一个具有FirmTypeId列(int)的Firm表,用于区分所有这些类型.一切都很好,除了我要求允许用户将一种类型的公司改为另一种.例如,用户在添加公司时可能会犯错,并希望将其从Big Firm更改为Small Firm.因为实体框架不允许将区分数据库列暴露为属性,所以我不相信有一种方法可以通过EF将一种类型更改为另一种类型.如果我错了,请纠正我.我看到它的方式我有两个选择:
我看过一篇文章,人们认为OOP的一个原则是实例不能改变它们的类型.虽然这对我来说很有意义,但我似乎无法连接点.如果我们遵循这个规则,那么唯一一次使用任何类型的继承(TPH/TPT)就是确定一种类型永远不会转换为另一种类型.因此,小公司永远不会成为一家大公司.我看到应该使用构图的建议.即使它对我来说没有意义(意思是我没有看到公司如何拥有一家大公司,对我来说,一家大公司就是一家公司),我可以看到如果数据存在,如何在EF中建模组合.多个表.但是,在我在数据库中有一个表的情况下,它似乎是TPH或我在上面#1和#2中描述的内容.