EF:获得“模型支持......已经改变”的错误,尽管我已经很好地改变了架构

时间:2013-05-17 13:47:27

标签: entity-framework alter

我并不担心回滚(即:Down()方法),并且希望始终使用最新的代码修改,因此我不使用代码迁移。

我改变了这个:

 int SomeProperty {get; set;}

对此:

 int? SomeProperty {get; set;}

然后我修改了数据库模式(将SomeProperty列改为允许NULLS)。

虽然这是最后一部分,但我仍然收到错误:

The model backing the <Database> context has changed ...

我需要做哪些其他更改才能使模式与模型匹配(如果int(对int?)是我做过的唯一更改?

2 个答案:

答案 0 :(得分:1)

告诉EF您要进行自动迁移

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, MyMigrationConfiguration>());
        Context.Database.Initialize(true);


public abstract class MyMigrationConfiguration<TContext> : DbMigrationsConfiguration<TContext> 
    where TContext  : DbContext{

    protected  MyMigrationConfiguration() {
        AutomaticMigrationsEnabled = true;  //<<<<<<<<<<<<<<<<<<<
        AutomaticMigrationDataLossAllowed = true; 

    }

编辑:根据反馈添加评论

更改数据库以匹配架构意味着如果迁移历史记录表不匹配,也需要更改它。手动设置Model Data二进制文件以匹配您的模型,并不是直截了当的。 如果您的表与您的代码匹配,那么作为最后一个模型记录在__MigrationHistory中的模型必须是不同的。你的问题就在那里开始。 您可以从MigrationHistory表中删除所有条目,然后重试。 [免责声明..参加条目副本等等]但是打击EF不是理想的方法。 这也意味着您处于准数据库优先模式。所以我建议你不要继续这条路。除非您计划进入DB First模式。

你所说的是你不相信EF在代码优先的情况下做正确的事情 备份数据库。然后尝试一下。如果EF做了“错误”的事情尝试并处理这将是我的建议。如果您有一个令人讨厌的迁移方案EF无法处理,请启动一个新问题以获得解决方法。

enter image description here enter image description here

答案 1 :(得分:0)

真正的答案是EF中的一个错误。
在Global.asax.cs中需要这一行:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        //...

        // Weird fix before using any DbContext instance <--- THIS
        Database.SetInitializer<MyDbContext>(null);
    }