visual-studio-2010 - 具有 Table-per-Type 继承的 Entity Framework 模型

标签 visual-studio-2010 entity-framework .net-4.0 entity-framework-4.1

当我在 Entity Framework 中使用 Table-per-Type Inheritance 定义一个模型时,如果我有一个名为 person 的基类/表(不是抽象的),以及两个子实体和表,成人和 child ,在创建一个 child 之后,我将如何获取相同的对象并将其转换为成人?转换为成人后,应删除 child 记录,但应保留人员表中的基类数据。

最佳答案

这是不可能的。这是类似的问题 here .只要实体存在并且它的类型是不可变的。唯一的方法是删除子实体(= 来自两个表的记录)并创建一个新的成人实体(= 两个表的新记录)。

这看起来根本不像是继承的场景。

编辑:

关于继承的评论针对的是您提到PersonAdultChild 实体的场景。无论如何,一旦您的场景允许更改类型,您应该考虑另一种解决方案,其中可以更改的部分将由组合处理。

例如:

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/

相关文章:

c++ - SFINAE 不适用于 Visual Studio 2010 for std::is_pointer

c# - Ninject WCF 扩展时间服务示例如何工作?

c# - Visual Studio 2010 使用第三方库的 Debug 或 Release 版本进行编译,具体取决于我的项目是在编译 Build 还是 Release?

c# - 按周分组 EF Core 2.1

visual-studio-2010 - VSTS 2010 SGEN : error : Could not load file or assembly (Exception from HRESULT: 0x80131515)

.net - 为什么 VBA 的 VarType 函数说这个 COM 对象是一个字符串? (Object 是 .NET 的 System.Object 类的 COM 版本的实例。)这是一个错误吗?

c++ - 让 GraphViz 作为 C++ 库工作的困难

c# - 如何在 ADO.NET Entity Framework 中加入

c# - EF Core 多对多自连接

asp.net - 如果我不指定targetFramework ="4.0"会发生什么?