Наследование между двумя контекстами в Entity Framework - PullRequest
2 голосов
/ 02 мая 2011

У меня есть один edmx в одной dll, и мне нужно, чтобы сущность в edmx в другой dll наследовала от сущности в первом edmx.Я попытался расширить начальный контекст первого edmx со вторым безуспешно.Каков наилучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 02 мая 2011

Это невозможно. Один EDMX = один ObjectContext и нет наследования между ними. Я нашел специальный хак , как заставить контекст загружать несколько EDMX, но они должны быть в одной сборке, и это работает только для перекрестных запросов EDMX linq-to-entity.

Я думаю, что вы должны снова смоделировать всю иерархию наследования во втором EDMX и повторно использовать тот же класс POCO для родительского = родительского объекта, который должен быть в обоих EDMX. Ознакомьтесь с этими статьями о работе с несколькими моделями ( часть 1 , часть 2 ). Существует возможность повторного использования типов CSDL из одного EDMX в другом EDMX для определения ассоциаций, но это не будет работать для наследования, потому что наследование определено в MSL, которое нельзя использовать повторно.

0 голосов
/ 02 мая 2011

Наследование может быть не лучшим решением для этого. Я хотел бы предложить внедрение зависимости от обеих сущностей из отдельных сборок, например:

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; } }
}
...