[英]Entity Framework 4.1 is not adding any rows to SQL Server Express database
[英]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.