使用Entity Framework 4.1 Code First在数据库中为null时,默认bool为false

And*_*eas 8 null boolean default bit entity-framework-4.1

当数据库中的值(位)设置为NULL时,如何设置默认值.现在我收到一个错误,告诉我从数据库加载bool时它不能为NULL.

谢谢.

Bro*_*ass 6

您的模型必须与数据库匹配 - 如果数据库可能具有NULL值,您应该在模型中使用可空的bool - 但是您可以覆盖模型中该属性的setter以将NULL转换为false值:

public class Foo
{
    private bool _bar;
    public bool? Bar
    {
        get { return _bar; }
        set
        {
            if (!value.HasValue)
            {
                _bar = false;
            }
            else
                _bar = value.Value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,您应该避免这种情况并在数据库列中设置默认值 - 然后您不需要此解决方法.


Dav*_*rke 6

为数据库更改添加迁移时,请更新迁移类以在更新数据库之前设置默认值:

AddColumn("Jobs", "IsAdvertisingRequired", c => c.Boolean(nullable: false, defaultValueSql: "0"));
Run Code Online (Sandbox Code Playgroud)

这将转换为以下SQL:

ALTER TABLE [Jobs] ADD  DEFAULT ((0)) FOR [IsAdvertisingRequired]
GO
Run Code Online (Sandbox Code Playgroud)