繁体   English   中英

将数据库从嵌入式更改为SQL Server Express后,Entity Framework 4.1代码第一个模型兼容性问题

[英]Entity Framework 4.1 code first model compatibility issue after changing database from embedded to SQL Server Express

你好实体框架专家!

我一直在关注官方教程,并开始了一个小型项目。 我已经开始使用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的初始化DropCreateDatabaseIfModelChanges

 public class SchoolInitializer : DropCreateDatabaseIfModelChanges<SchoolContext>

并将初始化器添加到Global.asax.cs application_start()

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

因此,在发生错误之后,我删除了SQL Server Compact .sdf文件,并切换回其连接字符串以及所有更改和放入其中的所有固定装置。

为什么不使用SQL Server Express?

我缺少什么? 还是应该为新的连接字符串创建另一个上下文并重构初始化程序? 感谢您阅读本

EF通过检查EdmMetadata表中的值来检查模型和数据库是否同步。 您的情况是该表在数据库中丢失。 但是,您正在使用DropCreateDatabaseIfModelChanges初始化程序。 因此,EF无法确定模型是否已更改为执行初始化程序。

如果要使用该初始化程序,则需要让EF使用EdmMetadata表创建数据库(这意味着删除您的express数据库,以便EF可以从connectionString为您重新创建它)。 否则,请删除初始化程序,然后手动对数据库进行更改或使用EF迁移。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM