我启用了自动迁移功能。然后,我删除了我的整个数据库。接下来,我从命令控制台执行Update-database
,并重新创建了我的数据库。然后,我启动我的应用程序只是为了看到这个错误:
无法检查模型兼容性,因为数据库没有 包含模型元数据。只能检查模型兼容性 使用Code First或Code First Migrations创建的数据库。
那究竟是什么元数据,我怎样才能将实体框架指向它?
PS。我的数据库包含名为MigrationsHistory
的表。
答案 0 :(得分:6)
以下是我之前写过的解决这个问题的可能方法的详细说明......
(不完全是你所经历的,因此本身并不重复,但考虑到不同的场景)
https://stackoverflow.com/a/10255051/417747
总结......
对我有用的是使用Update-Database -Script
这会创建一个带有“迁移差异”的脚本,您可以这样做 手动应用为目标服务器数据库上的SQL脚本(和您一样) 应该插入正确的迁移表行等。)。
如果仍然不起作用 - 你仍然可以做两件事......
a)删除迁移表(目标 - 在系统表下) - 按照 http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations-walkthrough.aspx 那里的评论 - 应该回到以前的行为,如果 你确定你的Db-s是相同的 - 它只是'信任' 你”,
b)作为我使用的最后手段 - 制作一个Update-Database -Script 完整模式(例如,通过初始化一个应该强制执行的空数据库 '完整脚本'),找到INSERT INTO [__MigrationHistory]记录, 只需运行它们,将它们插入数据库,并确保您的 数据库 - 和代码匹配,
应该让事情再次同步。
如果有帮助
答案 1 :(得分:1)
将此添加到您的上下文中:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
}
答案 2 :(得分:1)
分离您的本地数据库说例子&#39; database1.mdf&#39;来自visual studio&#39;服务器资源管理器&#39;然后打开SQL Server管理工作室右键单击Databases&gt;附上然后浏览相同的数据库.mdf&#39;如果您没有访问权限,则将mdf和ldf文件复制并通过c驱动器并进行附加。
然后在sql server上打开新的查询窗口,然后复制你的身份表,如下面的查询。
*&#39;从Database1.dbo中选择*进入[__MigrationHistory] .__ MigrationHistory&#39; *
答案 3 :(得分:0)
答案 4 :(得分:-1)
我使用Entity Framework 6,SQL 2008 R2,VS 2013 要解决此问题,请仅使用以下过程:
1)删除现有数据库(使用EF模型创建的现有数据库{代码优先})
2)再次运行APP。
前例示查询代码(在布局中):
如果我的模型是更改并在用户表中搜索用户名,则此代码创建db。
<body>
@{
// Delete && Create ...
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DBContext>());
var db = new DBContext();
var SearchingUser = db.Users.Where(c => c.UserName == "qwertyui");
if (SearchingUser.Count() == 0) {
var User = new Users { UserName = "qwertyui",Password = "12345678" };
db.Users.Add(User);
db.SaveChanges();
}
}
@RenderSection("scripts", required: false)
@RenderBody()
</body>