Наследование Code First EF 4.1 между несколькими приложениями - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть сценарий с двумя разными приложениями, использующими одну и ту же базу данных. Для обоих приложений я использую Code First EF 4.1. Оба эти приложения имеют общую библиотеку. Все хорошо, пока я не начну добавлять специфическое наследование приложения. Например, скажем, у меня есть класс в общей библиотеке, подобный этому

public class Customer
{
    public CustomerOrder Order;
}

И затем в одном приложении я наследую CustomerOrder, чтобы добавить некоторые пользовательские функции, необходимые для приложения.

public class EditableCustomerOrder: CustomerOrder
{
    public void Edit() {};
}

В этом приложении я хочу, чтобы все мои заказы клиентов загружались как EditableCustomerOrders. Однако я не могу найти способ указать в сопоставлении, что он должен игнорировать CustomerOrder и только сопоставить EditableCustomerOrder с базовой таблицей.

Я пробовал это

modelBuilder.Ignore<CustomerOrder>();

но в нем отсутствует свойство Order от Customer, поэтому я не могу его использовать. Единственный способ заставить это работать - это использование обобщений, так что Customer использует универсальный для его типа CustomerOrder, а затем я внедряю Customer в приложение, чтобы указать, что он использует EditableCustomerOrder. Однако это решение может выйти из-под контроля довольно быстро, с универсальными повсеместно.

Возможно ли то, что я пытаюсь сделать? По сути, я пытаюсь сказать сущности, что, хотя есть базовый тип и расширенный тип, я хочу, чтобы он использовал только расширенный тип.

1 Ответ

0 голосов
/ 27 января 2013

В случае, если какие-то отчаянные существа наткнуться на это, я решил опубликовать решение, которое я закончил.

Единственный способ создать сценарий, подобный этой работе, - использовать абстрактные классы в качестве базового класса, определенного в общей библиотеке, а затем расширить этот базовый класс в каждом приложении. Исходя из этого, я мог написать DbContext для каждого приложения, которое игнорировало все добавленные свойства в расширенных классах. Имея все это, я могу использовать Entity для сопоставления разных реализаций в разных приложениях с одним и тем же набором базовых классов.

Я также хотел бы посоветовать против этой общей идеи как решения. У меня это было в течение нескольких месяцев. Это работает, но неудобно работать и подвержено ошибкам. Чтобы отойти от этого, я опечатываю свои классы моделей и вместо этого сосредоточусь на MVVM решении для каждого приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...