Две таблицы с одинаковыми структурами, разными именами, как переключаться, который используется во время выполнения - PullRequest
0 голосов
/ 18 мая 2011

Я бы не планировал этого, поскольку требование только что появилось, но с помощью Entity Framework у нас есть пары таблиц (я назову их Twins, A & B) с одинаковыми структурами данных, но разными именами. Это, конечно, отображается через EF как пары объектов разных типов.

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

Я не могу понять, существует ли полезный маршрут, использующий репо, использующий структурную карту и / или полиморфизм, чтобы это работало.

Альтернативой может быть помещение таблиц-близнецов 'B' во вторую базу данных с тем же именем, что и их близнецы 'A', если это вообще поможет?

(До сегодняшнего дня я думал, что у меня две разные базы данных без кроссовера, и мне просто нужно было реализовать переключатель строки соединения - оказывается, это не так, поскольку 80% таблиц распределяются между двумя состояниями, а это всего лишь 3 или 4 двойниковых)

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Я бы реализовал это путем сочетания внедрения зависимостей и полиморфизма.

Вместо того, чтобы работать непосредственно с сущностями (назовем их TwinA и TwinB), я бы создал следующие типы ...

(простите за имя ... не так много контекстной информации в вопросе)

TwinModel (a projected type of the actual entities..hence view model)

Тогда у вас будет ...

ITwinRepository
TwinReposotoryImplA
TwinRepositoryImplB

В зависимости от необходимости,правильный репозиторий будет связан во время выполнения, используя структуру карты (через конфигурацию привязки).Различия в реализации состоят в том, чтобы использовать один набор сущностей над другим (TwinA или TwinB).

С точки зрения кодирования вы все еще кодируете ITwinRepository и работаете в TwinModel, поэтому потребители не будут нуждаться в влияниибудущие изменения, если вы решите внедрить таблицу TwinC.: O

0 голосов
/ 27 мая 2011

Я обнаружил, что создание двух баз данных, генерирование объектов EF из 1-го, затем во 2-м отбрасывание общих таблиц и замена их представлениями 1-го с тем же именем работает просто отлично.Это затем позволяет мне просто выбрать правильную строку подключения в хранилище (хотя обмен репо с Structuremap, вероятно, будет лучше).

...