Отдельные классы объектов POCO и DBContext из модели Entity Framework 6
Я начал использовать версию Entity Framework 6.0.1. Я хочу отделить созданные шаблоны классов DbContext и POCO к другой библиотеке классов от модели. Я потратил несколько часов на решение проблемы без каких-либо успехов.
Если я создаю новую библиотеку классов, добавьте EF 6 EntityObject Generator и заполните следующую переменную шаблона:
SourceCsdlPath = @"..\..\DataAccess\Model.edmx"
,
Получите следующую ошибку в списке ошибок после создания:
Ошибка 2 Запуск преобразования: System.IO.FileNotFoundException: Не удалось найти файл Имя файла: 'C:\Source\EFsource\ПОКО....\DataAccess\SZOSZRDBModel.edmx'
Трассировка стека сервера: at Microsoft.VisualStudio.TextTemplating.VSHost.TextTemplatingService.ResolvePath(String путь) в System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage (IntPtr md, Object [] args, Object server, Object [] & outArgs) в System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(Шеззаде MSG)
Исключение, сброшенное в [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(Шеззаде reqMsg, IMessage retMsg) в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData & msgData, тип Int32) при Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost.ResolvePath(String путь) в Microsoft.VisualStudio.TextTemplating31479401930D2C4820ACF71C66B5389A24A5053726798D9718DB676B3FFA30A3454B3CB1EDE2E1C267D5278B1528860C072E81A0E4647BC23993669604048FCD.GeneratedTextTransformation.ApplyUserSettings(UserSettings userSettings) в Microsoft.VisualStudio.TextTemplating31479401930D2C4820ACF71C66B5389A24A5053726798D9718DB676B3FFA30A3454B3CB1EDE2E1C267D5278B1528860C072E81A0E4647BC23993669604048FCD.GeneratedTextTransformation.TransformText()
Сообщение об ошибке ясно, но я не знаю, как установить путь к модели без полного абсолютного пути.
Я не уверен, что использовать новейшую версию структуры сущностей - лучшая идея...
Ответы
Ответ 1
Абсолютные пути не требуются. Похоже, что ваш относительный путь неверен. Я использую EF6.1, и у меня есть классы POCO в отдельном проекте. Вот как я получил его для работы в VS 2013.
- Создал проект библиотеки классов и добавил
ADO.NET Entity Data Model
. Этот проект будет содержать DB Context
.
- Добавлен новый
EF6.x DbContext Generator
элемент в проект DBContext
.
- Создан новый проект библиотеки классов. Этот проект будет содержать объекты
POCO
.
- Переместил файл
[Project Name]Model.tt
из проекта DBContext
в проект POCO
.
- Отредактирован файл
[Project Name]Model.tt
. В строке 5 я изменил:
const string inputFile = @"SampleModel.edmx";
в:
const string inputFile = @"..\DbContext\SampleModel.edmx";
- Добавлена ссылка в проекте
DBContext
в проект POCO
.
Если вы используете VS 2013, вы можете отлаживать шаблон, чтобы узнать, как разрешается относительный путь.
- Добавить точку останова в ваш
.tt
файл.
- Щелкните правой кнопкой мыши файл
.tt
в обозревателе решений и выберите "Debug T4 Template".