Разделение рамок сущности poco и objectcontext - PullRequest
4 голосов
/ 06 апреля 2011

До сих пор я создавал проект classLibrary и вставлял новую модель данных Ado.net Entity и генерировал из exixting базы данных. Коды классов и классов объектов создаются автоматически. это не важно для меня.

, но я хочу сделать это и разделить класс ObjectContext (например, SomeEntities) и таблицу на две библиотеки calss.

когда я изменяю свойство таблиц базы данных, я обновляю модель edmx и классы обновляются автоматически.

есть ли способ сделать это? я не использую codefirst, потому что есть база данных и данные в ней, я также не использую модель, я использую базу данных, но не могу отделить

1 Ответ

8 голосов
/ 06 апреля 2011

Поскольку в заголовке у вас есть "poco", я думаю, вы используете шаблон EF4 POCO Generator T4.

Тогда да, вы можете разделить классы POCO и ObjectContext на две разные библиотеки классов. Шаблон T4 подготовлен для этого сценария, поскольку он состоит из двух разных файлов:

  • POCOGenerator.Context.tt -> ответственный за создание вашего производного ObjectContext
  • POCOGenerator.tt -> ответственный за создание ваших объектов POCO

Если вы добавите генератор POCO в библиотеку классов, в которой находится ваш файл EDMX, по умолчанию оба tt-файла будут добавлены туда.

Но затем вы можете переместить второй файл ( POCOGenerator.tt ) в другую библиотеку классов. (Проект EDMX, в котором находится контекст, должен ссылаться на эту библиотеку для распознавания классов POCO.) После этого откройте этот файл в текстовом редакторе. Некоторые из первых строк в этом файле будут выглядеть так:

...
string inputFile = @"MyModel.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
...

Теперь вам нужно изменить путь к файлу edmx (только в POCOGenerator.tt, оставьте POCOGenerator.Context.tt без изменений). Предполагая, что у вас есть проект edmx и проект POCO в одном решении Visual Studio, новый путь может быть следующим:

...
string inputFile = @"..\..\MyEDMXProject\MyModel.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
...

Теперь вы можете выполнять оба файла отдельно от двух разных проектов. Один создаст файл контекста, а другой создаст ваши POCO-файлы.

...