Расширение Entity Framework Model во время выполнения приложения - PullRequest
1 голос
/ 03 марта 2011

Для бизнес-приложения я предоставляю базовую модель сущности. После этого конечный пользователь должен иметь возможность расширить модель для своих конкретных потребностей.

Для базовой модели я хочу использовать подход, основанный на базе данных. Но я не знаю, как это сделать, чтобы позволить пользователю расширить его.

Одна часть заключается в предоставлении пользовательского интерфейса для редактирования модели объекта, а другая - в отражении изменений в модели и базе данных после этого. Пожалуйста, предлагайте предложения.

EDIT
- После того, как модель сущностей отредактирована и сохранена, все средства EF должны работать как прежде.
- Обновление модели выполняется во время обслуживания, то есть оно не используется бизнес-пользователями.
- Уязвимый проект может быть скомпилирован, а новая сборка может быть произведена и введена в эксплуатацию.

1 Ответ

2 голосов
/ 03 марта 2011

Это невозможно.Когда вы модифицируете модель объекта, вы должны изменить связанные классы объекта (или создать новые) =>, вы должны перекомпилировать приложение или использовать некоторые динамические сборки.Более того, не существует API для изменения сопоставления сущностей во время выполнения, поэтому вы собираетесь создать новый конструктор сущностей.

Как правило, это то же самое требование, что и установка C # 2010 Express на клиентских рабочих столах и предоставление им возможности изменять, перестраивать и повторно развертывать вашapplication.

Редактировать:

Для того, что вы хотите, требуется:

  • Модификация EDMX - очень сложный XML-файл.Написание специального инструмента для этого будет сложной задачей.Более того, вам нужно будет добавить логику, которая не позволит пользователю разорвать приложение.
  • Запуск шаблонов T4 для создания новых или измененных объектов.
  • Компиляция приложения - что делать, если пользователь вносит изменения, которыепрервать сборку ???
  • Повторное развертывание БД - это само по себе довольно неудачно, потому что вся логика генерации БД - это рабочий процесс, работающий в Visual Studio.Кроме того, вам нужен другой рабочий процесс, который сможет обновить базу данных - по умолчанию можно развернуть только новую пустую БД.Такой рабочий процесс существует, но для него требуется VS 2010 Premium или Ultimate.
...