我们有一个使用自动数据迁移的应用程序,不允许数据丢失。根据公司的政策,我不允许更改这些设置。
我们在几个bool表中也有一些可以为空的列? type和int?类型。
我今天刚刚发现,有一段代码覆盖了现有的数据库记录,并将可空列的值设置为默认值(分别为false和0)。当前行为会降低应用程序的速度。我想强制数据库/ EF设置默认值,不允许空值。
到目前为止,我尝试了下面没有运气:
我基本上想要在Code First EF中复制的是以下MySQL语句:
ALTER TABLE orders
CHANGE COLUMN ScaleToFit ScaleToFit TINYINT(1) NOT NULL DEFAULT 0;
针对公司政策的问题,有没有优雅的解决方案?谢谢!
这可能是我的第一个非编程答案。
我最衷心地希望通过迁移实现这一目标,没有优雅的解决方案 - 根本没有解决方案。这意味着数据丢失检测存在漏洞,这将是个坏消息。它被认为是数据丢失,因为null
值也可能带有信息,即故意“不知道”。在布尔值的情况下:三态变为双态。在您的情况下不是这样,因此这个修复过程,但这不会改变规则。
根据公司的政策,我不允许更改这些设置。
政策有目的,但几乎总是变成目的。可能是因为策略比其基本目的更容易定义,执行和检查。但就像在Goodhart's law ...
当一项措施成为目标时,它就不再是一个好的衡量标准
......每一项政策可能有一天会破坏其目的而不再是一项好政策。能够识别这一点并在必要时对政策进行灵活处理是组织的一个值得称赞的特征。
我想说的是:建议暂时一次性暂停此策略,以允许迁移只应用具有默认值的这些非可空字段。如果空值真的没有意义,实际上从一开始就不应该是null,这是获取所需位置的最简单方法。