EF代码首先更改数据类型bool?布尔和整数?到整数
EF Code First change data type bool? to bool and int? to int
我们有一个使用自动数据迁移的应用程序,不允许丢失数据。 根据公司政策,我不能更改这些设置。
我们在bool的几个表中也有几个可以为空的列?类型和整数?类型。
我今天才发现有一段代码遍历现有的数据库记录并将可为空的列的值设置为其默认值(分别为 false 和 0)。当前行为会减慢应用程序的速度。我想强制 database/EF 设置默认值并且不允许空值。
到目前为止,我尝试了以下方法但没有成功:
- 从 bool 直接改变类型?布尔和整数?诠释。它抛出数据丢失异常。
- 在可为 null 的 属性 上添加 [Required] 和 [DefaultValue(false)] 属性。同样的事情,数据丢失异常。
- 在映射 class 中将 .IsOptional() 更改为 .IsRequired() 也导致了同样的异常。
我基本上想在 Code First EF 中复制的是以下 MySQL 语句:
ALTER TABLE orders
CHANGE COLUMN ScaleToFit ScaleToFit TINYINT(1) NOT NULL DEFAULT 0;
关于公司政策的问题,有什么优雅的解决方案吗?谢谢!
这可能是我的第一个非编程答案。
我衷心希望没有优雅的解决方案——而且根本没有解决方案——通过迁移来实现这一点。这将意味着数据丢失检测存在泄漏,这将是个坏消息。它被认为是数据丢失,因为 null
值也可能包含信息,即故意的 "don't know"。如果是布尔值:三态变成二态。这在你的情况下是不正确的,因此这个修复过程,但这不会改变规则。
By company's policy, I am not allowed to change those settings.
政策服务一个目的,但几乎总是变成目的。可能是因为政策比其根本目的更容易定义、执行和检查。但正如 Goodhart's law...
When a measure becomes a target, it ceases to be a good measure
...每一项政策都可能有一天会违背其目的,不再是一项好政策。认识到这一点并在必要时灵活调整政策的能力是组织的一个值得称赞的特征。
我想说的是:建议暂时中止此政策以允许仅应用这些具有默认值的不可空字段的迁移. 如果 null 值真的没有意义,实际上应该从一开始就不是 null 这是到达你想要的位置的最简单方法。
我们有一个使用自动数据迁移的应用程序,不允许丢失数据。 根据公司政策,我不能更改这些设置。
我们在bool的几个表中也有几个可以为空的列?类型和整数?类型。
我今天才发现有一段代码遍历现有的数据库记录并将可为空的列的值设置为其默认值(分别为 false 和 0)。当前行为会减慢应用程序的速度。我想强制 database/EF 设置默认值并且不允许空值。
到目前为止,我尝试了以下方法但没有成功:
- 从 bool 直接改变类型?布尔和整数?诠释。它抛出数据丢失异常。
- 在可为 null 的 属性 上添加 [Required] 和 [DefaultValue(false)] 属性。同样的事情,数据丢失异常。
- 在映射 class 中将 .IsOptional() 更改为 .IsRequired() 也导致了同样的异常。
我基本上想在 Code First EF 中复制的是以下 MySQL 语句:
ALTER TABLE orders
CHANGE COLUMN ScaleToFit ScaleToFit TINYINT(1) NOT NULL DEFAULT 0;
关于公司政策的问题,有什么优雅的解决方案吗?谢谢!
这可能是我的第一个非编程答案。
我衷心希望没有优雅的解决方案——而且根本没有解决方案——通过迁移来实现这一点。这将意味着数据丢失检测存在泄漏,这将是个坏消息。它被认为是数据丢失,因为 null
值也可能包含信息,即故意的 "don't know"。如果是布尔值:三态变成二态。这在你的情况下是不正确的,因此这个修复过程,但这不会改变规则。
By company's policy, I am not allowed to change those settings.
政策服务一个目的,但几乎总是变成目的。可能是因为政策比其根本目的更容易定义、执行和检查。但正如 Goodhart's law...
When a measure becomes a target, it ceases to be a good measure
...每一项政策都可能有一天会违背其目的,不再是一项好政策。认识到这一点并在必要时灵活调整政策的能力是组织的一个值得称赞的特征。
我想说的是:建议暂时中止此政策以允许仅应用这些具有默认值的不可空字段的迁移. 如果 null 值真的没有意义,实际上应该从一开始就不是 null 这是到达你想要的位置的最简单方法。