我在FluentMigrator C#迁移中遇到了这种模式:
Create.Column("c").OnTable("t").InSchema("s").AsBoolean().Nullable();
Update.Table("t").InSchema("s").Set(new {C = false}).AllRows();
Alter.Column("c").OnTable("t").InSchema("s").AsBoolean().NotNullable();
我很好奇最初的开发者是否有这样做的特定理由,而不是:
Create.Column("c").OnTable("t").InSchema("s").AsBoolean().NotNullable().WithDefaultValue(false);
我感谢正在进行的数据库行为略有不同;如果代码以某种方式未设置值,则可以通过让数据库提供合理的默认值(在上下文中为false)来避免崩溃。.在我看来,这是一种值得的方法
与使用EF6作为数据访问策略相比,在数据库中使用默认列值是否会产生持续的后果?除了“如果使用默认值将导致崩溃,以便可以识别出不提供值的故障代码”,我感到震惊的是,添加新列并为其指定合理的默认值是db-side不这样做的好处
在数据域对象的代码中的其他地方,我看到在创建相关对象时,此属性确实设置为false,因此,该项目(作为一个整体)的策略可能是“数据库永远不提供自行设定的默认值”。是否有理由采用这种策略?是否采用/强制执行比允许db提供难以读取的默认值容易(例如,“客户端可能不知道db设置了什么默认值,因此必须读取它,或者继续使用自己的默认值)?可能有所不同/会带来不良后果”)