Проблема совместимости первой модели кода Entity Framework 4.1 после перехода со встроенной базы данных на SQL Server Express - PullRequest
0 голосов
/ 19 февраля 2012

Привет Сущности Гуру Структур !!

Я следовал официальному руководству и начал с ним небольшой проект. Я начал использовать SQL Server Compact Edition и решил изменить его на базу данных SQL Server Express.

После изменения моей строки подключения

 <add name="SchoolContext" connectionString="Data  Source=|DataDirectory|Registration.sdf" providerName="System.Data.SqlServerCe.4.0"/>
 <!--    <add name="SchoolContext" connectionString="Data  Source=.\SQLEXPRESS;Integrated Security=True;Initial  Catalog=SchoolRegistration;MultipleActiveResultSets=True"  providerName="System.Data.SqlClient"/>-->

он начал выдавать эту ошибку:

Совместимость модели не может быть проверена, поскольку база данных не содержит метаданных модели. Убедитесь, что IncludeMetadataConvention был добавлен в соглашения DbModelBuilder.

Что я не понимаю, так это то, что у меня есть инициализатор, который реализует DropCreateDatabaseIfModelChanges

 public class SchoolInitializer : DropCreateDatabaseIfModelChanges<SchoolContext>

и добавил инициализатор к Global.asax.cs application_start()

 Database.SetInitializer<SchoolContext>(new SchoolInitializer());

Таким образом, после моей ошибки я удалил файл SQL Server Compact .sdf и переключился обратно на строку подключения и все изменения и все приспособления, которые были в нем помещены.

Почему бы не SQL Server Express?

Что-то мне не хватает? Или я должен был создать другой контекст для новой строки подключения и изменить мой инициализатор? Спасибо за чтение этого

1 Ответ

3 голосов
/ 19 февраля 2012

EF проверяет, синхронизируются ли модель и база данных, проверяя значения в таблице EdmMetadata.В вашем случае эта таблица отсутствует в базе данных.Но вы используете инициализатор DropCreateDatabaseIfModelChanges.Следовательно, EF не может определить, была ли изменена модель для выполнения инициализатора.

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

...