实体框架代码First Migrations认为存在不应该存在的变化

时间:2013-09-03 21:06:15

标签: .net entity-framework ef-code-first ef-migrations

我有一个网站和一个Windows服务,它们都引用同一个项目来获取实体框架数据上下文。每次启动Windows服务时,Entity Framework都会运行自动迁移,将其中一个数据库列从NOT NULL更改为NULL(不进行其他更改)。该列的属性标记为[Required],并且网站(指向其模型完全相同的DLL的完全相同版本)正确地认为该列的数据库应为NOT NULL。

我尝试禁用自动迁移,并且正如预期的那样,该服务随后崩溃,因为它表示数据模型具有需要应用的待定更改。

编辑我发现了更多信息......似乎发生了这种情况,因为我在属性上有[Required]和[AllowHtml]属性。当我删除[AllowHtml]属性时,它没有发生。因此,我的问题归结为:1)预期行为[AllowHtml]不能与[Required]一起使用,以及2)如何在Web服务使用此代码时才会发生这种情况,而不是在网站使用的代码?似乎Web服务在看到[AllowHtml]时完全忽略[必需]。

我正在使用EF 5。

2 个答案:

答案 0 :(得分:1)

我遇到了确切的问题...... 对于挂起的更改,我必须在启动时将三行添加到我的global.asax文件中,这就是它的样子:

    void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup
        AuthConfig.RegisterOpenAuth();
        Database.SetInitializer<EntityContext>(null);
        EntityContext context = new EntityContext();
        context.Database.Initialize(true);
    }

至于[Allowhtml],您使用的是mvc吗? ...据我所知[AllowHtml]属于System.Web.Mvc名称空间:http://msdn.microsoft.com/en-us/library/system.web.mvc.allowhtmlattribute(v=vs.98).aspx。 AllowHtml仅用于类型的模型绑定。它们不适用于Form,QueryString或FormCollection模型绑定。 http://forums.asp.net/t/1645209.aspx 如果属性使用AllowHtmlAttribute属性标记,则ASP.NET MVC框架会在模型绑定期间跳过对该属性的验证,从而使您的[Required]属性rignore ...

列从NOT NULL更改为NULL的原因是[Required]属性覆盖允许数据字段为空的数据库架构规则。 http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.requiredattribute.aspx

希望这会有所帮助......

答案 1 :(得分:0)

在EF项目中,您是否尝试过禁用自动迁移,然后强制EF不保持模型和数据库同步?

在global.asax文件中,添加:

Database.SetInitializer<dbContext>(null);

这将删除需要应用待定迁移的消息

干杯, 鲍尔泰克