Пытаетесь определить сущности DBContext, используя базовые сущности и унаследованные сущности, предоставляемые плагином времени выполнения? - PullRequest
0 голосов
/ 07 марта 2012

Мой проект требует основного приложения, которое выступает в качестве центральной точки для небольших приложений в стиле приложений для взаимодействия с гораздо более крупной центральной системой.Это телевизионные приложения, поэтому не думайте, что они мобильные.Большинство приложений смогут ссылаться на это ядро ​​без дополнительного кода.Тем не менее, некоторые приложения (которые не известны в настоящее время), скорее всего, должны иметь дополнительную функциональность.Я хочу поддержать эту дополнительную функциональность с помощью модели плагинов, которая позволяет расширять функциональность ядра без изменения ядра.Поскольку источник может быть недоступен разработчику плагина.Я хочу использовать EF Code First, чтобы позволить подключаемым модулям расширять модель данных.

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

modelBuilder.Entity<User>()
.Map(m => m.ToTable("User"))
.Map<CustomUser>(m => m.ToTable("CustomUser")); // Would like this portion provided by plug-in

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

Core

modelBuilder.Entity<User>()
.Map(m => m.ToTable("User"));

Плагин

modelBuilder.Entity<User>()
.Map<CustomUser>(m => m.ToTable("CustomUser"));

Однако, когда он запускается, я получаю сообщение об ошибке, утверждающее, что сущность Userдолжен быть определен в одном операторе сопоставления.

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

Если необходимы дополнительные разъяснения, пожалуйста, спросите.

Редактировать 1: Какточка информации.Я следил за этим постом здесь и могу копировать его функциональность, но он не позволяет мне строить отношения, которые я ищу.Если только я что-то упустил.

Редактировать 2: Проводя дополнительные исследования, я обнаружил, что могу построить свою конфигурацию отображения, как в этом посте , но я не могу понять, как передать свойКонфигурация в один раз создана.В настоящее время я использую MEF, но я готов попробовать другой метод.Я слышал, что Ninject может делать подобные вещи, но мне не ясно, как это работает.

1 Ответ

0 голосов
/ 16 августа 2012

Прошу прощения, если я вас полностью неправильно понял, но я думаю, что вы ищете следующее.У нас есть что-то очень похожее, работающее в нашем решении.

Core

modelBuilder.Entity<User>()
    .Map(m => m.ToTable("User"));

Плагин

modelBuilder.Entity<CustomUser>()
    .Map(m => m.ToTable("CustomUser"));

где

public class CustomUser : User {}
...