Entity Framework 6: контекст используется в режиме Code First с кодом, созданным из файла EDMX. - PullRequest
0 голосов
/ 07 мая 2020

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

Я обнаружил, что контекст меняется с:

public MediaRentalEntities()
     : base("name=MediaRentalEntities")
{
}

На это:

public MediaRentalEntities()
     : base("MediaRentalEntities")
{
}

Должно исправить проблему, но это не так. Теперь он выдает исключение (и показывает эту ошибку несколько раз в зависимости от того, сколько пользовательских элементов управления у меня есть, в настоящее время 3):

Контекст используется в режиме Code First с кодом, который был сгенерирован из EDMX файл для разработки Database First или Model First. Это не будет работать правильно. Чтобы устранить эту проблему, не удаляйте строку кода, которая вызывает это исключение. Если вы wi sh используете сначала базу данных или сначала модель, убедитесь, что строка подключения 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

Это мой текущий app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
  </startup>
  <entityFramework>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="MediaRentalEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;data source=localhost;initial catalog=MediaRental;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

Это начинает утомлять, я испытываю искушение перейти на EntityFrameworkCore или даже Dapper, кажется, что EntityFramework6 против пользователя, но WPF имеет гораздо больше функций. NET Framework.

1 Ответ

0 голосов
/ 07 мая 2020

в строке подключения замените MyModel на « MediaRentalEntities ». Это будет работать

или

Если вы сначала сгенерировали его с помощью БД, тогда у вас уже будет класс контекста, где код похож на

 public MyModel()
     : base("name=MyModel")
{
}
...