繁体   English   中英

如何在Entity Framework中实施新的数据完整性规则

[英]How to enforce new data integrity rules in Entity Framework

我有一个表添加了一些新列,它们允许空值准确地容纳现有数据。 在创建这些记录时,新列不存在,因此null准确表示当时数据库的状态。 对于所有新数据,我不想允许空值。 管理它的最佳做法是什么?

如果我在EntityTypeConfiguration类中使用.IsRequired() ,它将尝试更改表以使列不可为空并在遇到历史空值时失败。 我仍然希望能够读取那些旧记录,我只是不想在没有新列的情况下编写任何新记录。

我想尽可能靠近数据库这样做,所以我在setter中放了一些验证代码。

    private string _CountryCode;
    public string CountryCode
    {
        get
        {
            return _CountryCode;
        }
        set
        {
            if (string.IsNullOrEmpty(value))
                throw new ArgumentException("Country Code Required");
            _CountryCode = value;
        }
    }

这确实有效,但我有一种唠叨的感觉,那里有一个更清洁的解决方案。

这个问题的答案“ 实体框架迁移中必填字段的默认值吗? ”对您有帮助吗?

您必须定义defaultValueSql,以便可以成为所有NULL值。

正确的方法是使用IsRequired()因为对于EF,它既可以是必需的,也可以不是。 如果以某种方式接受不存在,那就是:不是必需的。

为我处理它的方法是迁移以前的数据,但如果你决定不这样做,你的解决方案似乎是处理它的好方法,但是,你当前的setter对我来说看起来很奇怪。 例如,如果我实例化该类,并执行myObject.CountryCode = "AA"; ,我会得到一个例外,因为我的集合之前的当前值为null或空白。 听起来很错误。 也许你应该测试value呢?

另外,我见过使用EF的大多数公司系统都会阻止EF自动更改数据库。 使用Database.SetInitializer<YourContextClass>(null);是常见的(但不是通用的)练习Database.SetInitializer<YourContextClass>(null); 在您的DbContext以防止它在您的生产环境中自动执行此操作。 在某些情况下,您仍然可以调用方法强制更新数据库结构,或者使用数据库项目生成的dacpac。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM