当我在 Entity Framework 中使用 Table-per-Type Inheritance 定义一个模型时,如果我有一个名为 person 的基类/表(不是抽象的),以及两个子实体和表,成人和 child ,在创建一个 child 之后,我将如何获取相同的对象并将其转换为成人?转换为成人后,应删除 child 记录,但应保留人员表中的基类数据。
最佳答案
这是不可能的。这是类似的问题 here .只要实体存在并且它的类型是不可变的。唯一的方法是删除子实体(= 来自两个表的记录)并创建一个新的成人实体(= 两个表的新记录)。
这看起来根本不像是继承的场景。
编辑:
关于继承的评论针对的是您提到Person
、Adult
和Child
实体的场景。无论如何,一旦您的场景允许更改类型,您应该考虑另一种解决方案,其中可以更改的部分将由组合处理。
例如:
public class DataSource
{
public int Id { get; set; }
public virtual DataSourceFeatures Features { get; set; }
}
public class DataSourceFeatures
{
[Key, ForeignKey("DataSource")]
public int Id { get; set; }
public virtual DataSource DataSource { get; set; }
}
public class XmlDataSourceFeatures : DataSourceFeatures { ... }
public class DelimitedDataSourceFeatures : DataSourceFeatures { ... }
public class ServiceDataSourceFeatures : DataSourceFeatures { ... }
现在更改类型意味着从数据库中删除相关的当前 DataSourceFeatures
并创建一个新的但原始对象保持不变 - 只有关系发生变化。
关于visual-studio-2010 - 具有 Table-per-Type 继承的 Entity Framework 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7328386/