it-roy-ru.com

Entity Framework: контекст используется в режиме Code First с кодом, который был сгенерирован из файла EDMX

Я разрабатываю приложение WPF с первым подходом к базе данных EF 6, у меня есть 1 проект в моих решениях, если я запускаю свой проект, эта ошибка всегда появляется.

Контекст используется в режиме Code First с кодом, который был сгенерирован из файла EDMX для разработки Database First или Model First. Это не будет работать правильно. Чтобы устранить эту проблему, не удаляйте строку кода, которая выдает это исключение. Если вы хотите использовать Database First или Model First, убедитесь, что строка подключения Entity Framework включена в app.config или web.config запускаемого проекта. Если вы создаете свой собственный DbConnection, то убедитесь, что это EntityConnection, а не какой-то другой тип DbConnection, и что вы передаете его одному из базовых конструкторов DbContext, которые принимают DbConnection. Чтобы узнать больше о Code First, Database First и Model First, см. Документацию Entity Framework здесь: http://go.Microsoft.com/fwlink/?LinkId=394715

13
Munjani375

Моя ошибка заключалась в использовании стандартной строки подключения в конструкторе

(Server = test\test; Database = DB; User Id = test_user;Password = test), 

но Entity Framework нужен другой формат 

(metadata=res://*/DBModel.csdl|res://*/DBModel.ssdl|res://*/DBModel.msl;provider=System.Data.SqlClient;provider connection string="data source=test\test;initial catalog=DB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework""" providerName = ""System.Data.EntityClient)

Правка: Изменен код для форматирования в виде кода, чтобы его было легче читать.

13
Stepan Tripal

EF делает предположения на основании наличия или отсутствия раздела метаданных в строке подключения. Если вы получили эту ошибку, вы можете добавить раздел метаданных в строку подключения в вашем конфигурационном файле.

Например. если ваша строка подключения выглядит так:

    <add name="MyModel" connectionString="data source=SERVER\INSTANCE;initial catalog=MyModel;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

Добавьте metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl; так, чтобы это выглядело так:

<add name="MyModel" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;data source=SERVER\INSTANCE;initial catalog=MyModel;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
9
Daniel de Zwaan

Одна вещь, которую вы можете сделать, это ... (если база данных сначала)

Откройте .edmx [Diagram] -> щелкните правой кнопкой мыши -> «Обновить модель из базы данных»

И посмотрите, появятся ли вкладки «Добавить», «Обновить» и «Удалить».

Если нет ... возможно, ваше соединение разорвано, и вместо этого появится диалог для VS, создающий новую строку соединения. знак равно

3
Rafael Ribeiro

Очень поздно, но все равно полезно. Я застрял в аналогичной проблеме. Опубликовал вопрос о SO и смог найти решение. Вы можете сослаться на Ошибки строки соединения в C # Web Api . Моя ситуация была такова: у меня было две строки подключения в web.config (вы узнаете почему, когда перейдете по ссылке). Комментирование одной строки приводило к появлению ошибки, полученной при комментировании другой, вызывало ошибку, как показано ниже:

Произошла ошибка при попытке создать контроллер типа AccountController. Убедитесь, что у контроллера есть открытый конструктор без параметров.

что я сделал: я назвал свою первую строку подключения как DefaultConnection, а в конструкторе класса ApplicationDbContext я дал эту DefaultConnection. Теперь мой AccountController использует эту строку подключения, а все остальные контроллеры используют вторую строку подключения. Это решило мою проблему.

1
Harry .Naeem

Вы не должны использовать сгенерированную строку подключения, теперь у вас есть все файлы метаданных, включенные в ваше решение. Вместо этого попробуйте использовать в разделе connection stringapp.config

"data source=localhost\sqlexpress; initial catalog=sample; integrated security=True;MultipleActiveResultSets=True;"
1
Mozgovoy Artem

У меня есть два проекта:

Один для сгенерированного файла EDMX и всех связанных моделей.

Другой - это ASP.NET MVC Web. 

Я столкнулся с этой проблемой, поскольку строка подключения, которую я использую в веб-проекте ASP.NET MVC, является обычной строкой, которую я использую при использовании подключения ADO.NET. Итак, я сделал следующее:

  • Откройте файл app.config в файлах проекта EDMX. 

  • Скопируйте строку подключения.

  • Вставьте его в WEB-проект, поскольку он будет использоваться при запуске Приложения.

0
Willy David Jr

Я также сталкивался с этим точно таким же сообщением, но работал с веб-проектом MVC. Это сообщение выдается, когда я пытаюсь автоматически сгенерировать контроллер из импортированной модели. Кажется, что это не работает, потому что "это было сгенерировано из файла EDMX".

Хорошей новостью является то, что это работает, если я сгенерирую модель, основанную на «Code First» вместо «EF Designer». Плохая новость заключается в том, что я не могу использовать EF Designer, если хочу, чтобы автоматически генерировалось контроллер. Не имеет значения, какой из этих двух способов вы генерируете свою модель. Как только модель сгенерирована, вы используете ее таким же образом.

Пытается удалить все ваши объекты emdx из вашего проекта и воссоздать модель, основанную на Code First вместо EF Designer. Работал на меня!

0
danilocgsilva