2013-12-01 1 views
15

Я начал использовать версию Entity Framework 6.0.1. Я хочу отделить созданные шаблоны классов DbContext и POCO к другой библиотеке классов от модели. Я провел несколько часов, решив проблему без каких-либо успехов.Отдельные классы объектов POCO и DBContext из Entity Framework 6 Модель

Если я создаю новую библиотеку классов, добавьте EF 6 EntityObject генератора и заполнить следующий переменный шаблон:

SourceCsdlPath = @"..\..\DataAccess\Model.edmx",

Получить следующую ошибку в списке ошибок после строительства:

Ошибка 2 Выполнение преобразования: System.IO.FileNotFoundException: Не удается найти файл Имя файла: 'C: \ Source \ EFsource \ POCO .... \ DataAccess \ SZOSZRDBModel.edmx'

сервера трассировки стека: в Microsoft.VisualStudio.TextTemplating.VSHost.TextTemplatingService.ResolvePath (Строка пути) в System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage (IntPtr мД, Object [] арг, сервер объектов , Object [] & outArgs) на System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage (IMessage тзд)

Exception при вызваны повторно [0]: в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) по адресу Sys tem.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

Вы хотите '@" \ .. \ .. \ DataAccess \ Model.edmx "'? –

+0

Я не понимаю ваш вопрос. Я хочу установить другую папку проекта, но я не могу перейти в дерево каталогов. – Concware

ответ

33

Абсолютные пути не требуется. Похоже, что ваш относительный путь неверен. Я использую EF6.1, и у меня есть классы POCO в отдельном проекте. Вот как я получил его для работы в VS 2013.

  1. Создал проект библиотеки классов и добавил ADO.NET Entity Data Model. Этот проект будет содержать DB Context.
  2. Добавлен новый объект EF6.x DbContext Generator в проект DBContext.
  3. Создан новый проект библиотеки классов. Этот проект будет содержать объекты POCO.
  4. Переведено [Project Name]Model.tt файл от проекта DbContext к проекту POCO.
  5. Отредактировано [Project Name]Model.tt. В строке 5, я изменил:
    const string inputFile = @"SampleModel.edmx";
    к:
    const string inputFile = @"..\DbContext\SampleModel.edmx";
  6. Добавлена ​​ссылка в DbContext проекта к проекту POCO.

Если вы используете VS 2013, вы можете отладить шаблон, чтобы узнать, как разрешается относительный путь.

  1. Добавить контрольную точку в ваш файл .tt.
  2. Щелкните правой кнопкой мыши файл .tt в обозревателе решений и выберите «Debug T4 Template».
+0

Спасибо, приятель! Это сработало для меня. Хорошего дня! :) – Concware

+0

@fremis, ваши pocos у них есть какие-то базовые типы, как в EF4? В DB Первый подход, созданные pocos, отмечены как частичные, но не похожи на то, что они получены от чего-либо вообще. – IbrarMumtaz

+2

Ibar, мой DTO не наследует никакого класса ... частичное ключевое слово позволяет мне распространять определение класса по нескольким файлам. Когда мне нужно восстановить мои DTO, шаблон T4 будет перезаписывать файлы, сгенерированные кодом, но мой «отредактированный вручную» файл не затрагивается. Я редактирую шаблон T4 для создания файлов со следующим соглашением об именах: [имя класса] .base.cs. Затем я создаю классы с именем [имя класса] .cs. Не создаваемые файлы будут расширять «базовые» сгенерированные файлы с помощью интерфейсов. Я могу привести конкретный пример, если вы заинтересованы. – fremis