2

Обычно можно написать классы моделей и создать DbContext с несколькими DbSet'ами в соответствующие классы моделей, чтобы сначала создать базу данных в EF-коде.Код Entity Framework с добавлением новых моделей из других проектов

Библиотека Prism позволяет создавать модули. Модули живут в одном и том же решении, но как другой проект внутри решения, или, может быть, это может быть DLL из другого решения.

Мой вопрос сейчас: что, если у вас есть, например, модуль призмы (отдельный проект) с собственными моделями (и определениями DbSet). Как вы можете добавить или ввести (или позволить EF обнаружить) эти классы моделей и DbSet из этого модуля и добавить их в существующую базу данных EF)?

Допустим, что какой-то внешний человек пишет плагин (модуль призмы) со своими собственными моделями баз данных и использует соответствующие определения DbSet. Если этот человек сбрасывает DLL модуля призмы в каталоге программы, как основное приложение (при запуске обычно) знает, что есть другие DbSet из модуля призмы, которые также необходимо создать в базе данных, если они еще не существуют , (И как их можно добавить?)

Заранее спасибо.

Может ли кто-нибудь дать пример кода, как это сделать? Я думал об атрибутах MEF [ImportMany] и [ExportMany], но я не уверен, что это может сработать.

ответ

0

У меня недавно была эта проблема и не нашел удовлетворительного решения.

Проблема заключается, особенно если вы используете службы RIA, все классы должны быть установлены во время компиляции, чтобы Visual Studio могла генерировать код для вас. Единственное решение, которое я нашел для этого, было наследованием, но я отказался от этой идеи, потому что она значительно снижает эффективность многих проблем. Если вы не используете абстрактные классы, службы RIA даже реплицируют структуру наследования. Но все же вам понадобится базовый класс для каждого объекта, который вы хотите (например, CustomerBase в основном модуле -> Клиент: CustomerBase в CustomerModule).

(Подробно: причина этого в том, что если вы хотите использовать внешние ключи, у вас должно быть некоторое представление о другом классе, например, в клиенте в BillingModule).

Если вам не нравится путь наследования, вы можете определить интерфейсы, которые вы реализуете вручную на клиенте, используя частичные классы (чтобы позже только разоблачить этот интерфейс в своих хранилищах). Я застрял в этом, и теперь я вполне счастлив. И все-таки теперь я хотел, чтобы это было так.

+0

hmmmm так на самом деле вы говорите, что мой вопрос не может быть сделан с EF-кодом в первую очередь? – juFo

+0

Да ... и обходные пути довольно утомительны. – LueTm

Смежные вопросы