Код Entity Framework сначала добавляет модели из других проектов - PullRequest
2 голосов
/ 22 декабря 2011

Обычно можно написать классы моделей и создать DbContext с несколькими DbSet для соответствующих классов моделей, чтобы сначала создать базу данных в коде EF.

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

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

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

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

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

1 Ответ

0 голосов
/ 26 декабря 2011

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

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

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

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

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