Сначала создайте модель Entity Framework 5 - Где IDisposable ушел? - программирование
Подтвердить что ты не робот

Сначала создайте модель Entity Framework 5 - Где IDisposable ушел?

В первой модели Entity Framework 5, по-видимому, некоторые изменения происходят из-за того, как генерируются файлы классов (больше не генерируется код, а T4-шаблоны)

2 примера:

  • Сгенерированный файл контекста больше не реализует IDisposable
  • Нет конструктора, который больше занимает строку соединения

Есть ли более серьезные изменения? И каково их решение?

4b9b3361

Ответ 1

Код по умолчанию, созданный в модели в Entity Framework 5, теперь наследует DbContext вместо ObjectContext.

Это все еще реализует IDisposable, но если вы получаете ошибку из строки кода, аналогичной этой:

using (var mymodel = new MyModelContext()) { ... }

... жалуясь на не реализацию IDisposable, то ваша проблема, скорее всего, ваша модель определена в отдельной сборке, которая ссылается на EF5, и вы не добавили ссылку EF5 на ваш проект.

Как уже упоминал в своем ответе Ladislav Mrnka, если вы хотите передать строку соединения конструктору, вы должны вручную создать свой собственный конструктор.

Если вы хотите переключить Entity Framework обратно на старый стиль сгенерированного кода, который автоматически сгенерирует конструктор, который вы ищете, выполните следующие действия:

  • Нажмите на поверхность конструктора вашего файла EDMX и посмотрите на окно свойств. Найдите свойство "Стратегия генерации кода" и установите для него значение "По умолчанию" вместо "Нет". Это позволит Visual Studio начать создавать код для вашей объектной модели в MyModel.Designer.cs в одном большом файле, на этот раз используя ObjectContext вместо DbContext.
  • Удалите следующие субфайлы ниже вашего файла EDMX: MyModel.Context.tt, MyModel.tt. Это автоматически созданные файлы, которые вам больше не нужны. Если вы их не удалите, вы получите конфликты с именами классов, потому что ваши объекты будут созданы дважды.

Ответ 2

Сгенерированный файл контекста больше не реализует IDisposable

IDisposable по-прежнему реализуется по типу родительского контекста. Сгенерированный тип все еще доступен.

Нет конструктора, который больше занимает строку соединения

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

Есть ли более серьезные изменения? И каково их решение?

Это полное изменение, потому что оно использует API API API - DbContext вместо ObjectContext API, что означает разные типы, разные методы, объекты POCO и т.д. Если вы хотите вернуться к исходному генерации кода, вам нужно удалить те шаблоны T4 и включить генерацию кода, как описано в файле .Designer.cs, но текущий рекомендуемый способ - использовать POCOs и API DbContext.

Ответ 3

У меня была такая же проблема с оператором using, который нуждался в типе, который расширил IDisposable... Оказывается, я забыл ссылаться на System.Data.Entity в моем проекте... Добавил ссылку и исправил проблему.