实体框架中两个上下文之间的继承

本文关键字:上下文 两个 之间 继承 框架 实体 | 更新日期: 2023-09-27 17:54:00

我在一个dll中有一个edmx,并且需要从第一个edmx中的实体继承另一个dll中的edmx中的实体。我曾尝试将第一个edmx的初始上下文扩展到第二个edmx,但没有成功。实现这一目标的最佳方式是什么?

实体框架中两个上下文之间的继承

不可能。一个EDMX =一个ObjectContext,它们之间没有继承关系。我发现了一个特殊的黑客如何强制上下文加载多个EDMX,但它们必须在同一个程序集中,它只适用于跨EDMX链接到实体查询。

我认为你必须在第二个EDMX中再次建模整个继承层次结构,并为parent重用相同的POCO类= parent实体必须在两个EDMX中。查看这些关于使用多个模型的文章(第1部分和第2部分)。有可能在其他EDMX中重用来自一个EDMX的CSDL类型来定义关联,但它不适用于继承,因为继承是在MSL中定义的,不能重用。

继承可能不是最好的解决方案。我建议从两个实体中分别注入依赖项,例如:

public class CompositeObj
{
    protected ObjectType1 obj1 { get; set; }
    protected ObjectType2 obj2 { get; set; }
    public CompositeObj(ObjectType1 obj1, ObjectType2 obj2)
    {
         this.obj1 = obj1;
         this.obj2 = obj2;
    }
    public string Property1 { get { return this.obj1.Property1; } }
    public string Property2 { get { return this.obj2.Property2; } }
    pulbic string Property3 { get { return this.obj1.Property1 + this.obj2.Property2; } }
}