Как изменить сопоставление для уже сопоставленных объектов в других сборках? - PullRequest
1 голос
/ 17 февраля 2012

Я хотел бы настроить отображение для сущностей в EF

Например, у меня есть сущность:

public class User
{  
    public int UserId { get;set;}
    public string Firstname { get;set;}
    public string ColA {get; set;}
    public string ColB {get; set;}
}

Это уже добавлено сопоставление в OnModelCreating () в EF для общего пользования.,Если у меня есть 2 функции в 2 отдельных сборках, вызовите AssemblyA.dll и AssemblyB.dll, и они динамически загружаются платформой MEF.

AssemblyA.dll просто нужен ColA и должен удалить ColB и наоборот для AssemblyB.dll, поэтому мне нужно определить 2 новых класса отображения для этих 2 сервисов, и он будет динамически запускаться для удаления столбца в соответствии с его сборкой (AssemblyA игнорирует ColB, а AssemblyB игнорирует ColA).Я не хочу изменять код текущего EF, потому что он уже находится в производстве.Все изменения для каждой сборки должны быть своими.

Поддерживает ли нас EF таким образом?Или вы могли бы дать мне направление.

1 Ответ

0 голосов
/ 17 февраля 2012

Не очень понятно, что вы пытаетесь сделать, но:

  • Каждый контекст EF может отображать каждую таблицу и сущность только один раз
  • Это означает, что вы загружаете конфигурацию дляAssemblyA, вы не можете использовать конфигурацию для AssemblyB
  • Это также означает, что вы не можете использовать способ по умолчанию, как построение отображения EF внутри OnModelCreating, потому что этот метод обычно вызывается только один раз за все время жизни приложения.
  • Youможно вручную создать два DbModel insnaces, скомпилировать их в DbCompiledModel и передать их конструктору DbContext - это должно позволить вам иметь две разные конфигурации сопоставления для AssemblyA и AssemblyB, но вы никогда не будете иметь их обоих в одном контекстеinstance.
  • Миграции EF, скорее всего, не будут работать, потому что они ожидают одного набора сопоставления для базы данных

В любом случае, если вы используете MEF и модульную архитектуру, каждый объект должен быть либо основным (не относится к какому-либо конкретному модулю и является общим для модулей) или модулем(не используется никакими другими модулями или ядром).

...