Отдельные классы объектов 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".