3

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

我尝试禁用自动迁移,正如预期的那样,服务随后崩溃,因为它说数据模型有待应用的更改。

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

我正在使用 EF 5。

4

2 回答 2

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] 属性...

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

希望这可以帮助...

于 2013-09-16T13:16:31.783 回答
0

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

在您的 global.asax 文件中,添加:

Database.SetInitializer<dbContext>(null);

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

干杯,巴特克

于 2013-09-16T03:31:31.877 回答