假设我的数据库中有下表:
CREATE TABLE [dbo].[Test]
(
[Id] INT IDENTITY (1, 1) NOT NULL,
[Active] BIT DEFAULT ((1)) NOT NULL,
)
从该数据库创建 EF 模型时,映射到 Boolean
列的 Active
bit 列 具有无默认值(参见属性“默认值”):
为什么 Entity Framework 会这样?为什么在创建模型时,数据库中定义的默认值不会自动应用到模型中?数据库声明默认值应为 1
,我假设这将是模型中的默认值 true
。我真的必须再次为模型中的所有列设置默认值吗?
我检查了 int 和 bit 列的这种行为。
我做了更多调查,并尝试手动将“默认值”属性设置为 True
和 true
,两者都有效。
测试实体的自动生成构造函数更改自
public Test()
{
}
到
public Test()
{
this.Active = true;
}
因此默认值在 EF 中是可能的,但在生成基于数据库优先的模型时不会设置它们,至少在我的机器上不会。
因此,问题仍然存在:我真的必须再次为模型中的所有列设置默认值,即使它们已经在数据库中设置了吗?
最佳答案
试试这个:
StoreGeneratedPattern = Calculated
编辑:
抱歉,我的答案只有一行代码,但我昨天真的很匆忙。
要使 EF 设置属性的数据库默认值,最快的方法是打开 .edmx 设计器,单击感兴趣的字段并设置
StoreGeneratedPattern = 计算
在其属性中(您可以在第二个屏幕截图中看到此属性,您将“默认值”设置为 true)。
关于c# - 创建 Entity Framework 模型时忽略数据库默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40310675/