Подтвердить что ты не робот

Entity Framework 5 и классы Visual Studio 2012 POCO в разных проектах

В VS 2010 и EF 4.4 вы могли перемещать и редактировать файлы .tt при использовании генератора DBContext в Entity Framework, чтобы ваши объекты POCO находились в другом проекте, кроме файлов DBContext.

См. здесь и здесь для примеров того, о чем я говорю.

В VS2012/EF5 это кажется невозможным. классы POCO генерируются как подэлемент под файлом EDMX. Файлы не могут быть скопированы из Visual Studio. Перемещение файлов из Проводника не помогает, потому что файлы, которые вы перемещаете, воссоздаются во время компиляции.

Я пропустил что-то основное здесь?

Я не использую какие-либо элементы генерации кода с EF5 (тогда как я был с EF4.x.) Разве может быть разница?

4b9b3361

Ответ 1

В Visual Studio 2012, когда вы добавляете ADO.NET Entity Data Model (*.edmx), она включает в себя шаблоны T4 для классов контекста и модели в качестве подэлементов файла EDMX. Например, если вы добавите MyModel.edmx, он будет иметь 4 подпозиции следующим образом:

  • MyModel.Context.tt
  • MyModel.Designer.cs(в проектах на С#)
  • MyModel.edmx.diagram
  • MyModel.tt

MyModel.tt генерирует объекты POCO в качестве подпозиций. Чтобы сгенерировать объекты в отдельном проекте, выполните следующие действия:

  • Создайте отдельный проект класса.
  • Добавьте новый элемент, выберите шаблон EF 5.x DbContext Generator. Это создает файл *.tt. Например, MyModel.tt.
  • Отредактируйте файл шаблона следующим образом:

    const string inputFile = @"MyModel.edmx"; // old value (remove)
    const string inputFile = @"..\MyOtherProjectName\MyModel.edmx"; // new value
    
  • В другом проекте разверните файл EDMX и щелкните правой кнопкой мыши на MyModel.tt, выберите "Удалить".

Что это. Все готово. Теперь у вас есть модель и контекст в одном проекте и объекты в отдельном проекте.

Ответ 2

Обратите внимание на следующее сообщение: Visual Studio 2012 - Невозможно переместить файлы EF.tt

В нем говорится о том, как вы можете удалить информацию о зависимостях файла .tt в файл .edmx в assoicated файле .csproj. Это позволит вам перетащить файл .tt из Обозревателя решений.

Просто убедитесь, что обновили путь к файлу в начале файла .tt, чтобы указать на .edmx, как описано в предыдущем ответе и показано ниже:

const string inputFile = @"..\EFTest\EFTestModel.edmx";

Фактически несколько частей и шагов и отсутствие какого-либо одного из них могут помешать правильному разделению классов POCO. Я создал сообщение в блоге, в котором подробно описывается весь процесс, который вы можете посмотреть ниже:

Разделение структур Entity Framework Классы POCO, созданные из шаблона T4 в VS.NET 2012:
http://allen-conway-dotnet.blogspot.com/2013/01/separating-entity-framework-poco.html

Ответ 3

Итак, вам нужно переместить его через обозреватель Windows. Затем отредактируйте путь к файлу EDMX в файле .tt, который вы переместили. Как только вы это сделаете, он работает. (Я знаю, что я говорю, что это не выше, но я, должно быть, сделал что-то неправильно в первый раз, когда попробовал.)