创建实体框架模型时忽略数据库默认值

Mar*_*ger 4 c# sql-server entity-framework ef-database-first entity-framework-6

假设我的数据库中有下表:

CREATE TABLE [dbo].[Test]
(
    [Id]      INT            IDENTITY (1, 1) NOT NULL,
    [Active]  BIT            DEFAULT ((1)) NOT NULL,
)
Run Code Online (Sandbox Code Playgroud)

从此数据库创建 EF 模型时,映射到列的Active 位列的映射Boolean没有默认值(请参阅属性“默认值”): 属性视图 - 模型图

为什么实体框架会这样?为什么在创建模型时不会自动将数据库中定义的默认值应用到模型中?DB 声明默认值应该是1,我假设它true是模型中的默认值。我真的必须再次为模型中的所有列设置默认值吗?

我检查了intbit列的这种行为。


我做了更多调查,并尝试手动将“默认值”属性设置为Truetrue,并且两者都有效。

手动更改默认值

测试实体的自动生成的构造函数从

public Test()
{
}
Run Code Online (Sandbox Code Playgroud)

public Test()
{
    this.Active = true;
}
Run Code Online (Sandbox Code Playgroud)

所以默认值在 EF 中是可能的,但是在基于数据库优先生成模型时没有设置它们,至少在我的机器上没有。

所以,问题仍然存在:我是否真的必须再次为模型中的所有列设置默认值,即使它们已经在数据库中设置?

小智 5

尝试这个:

StoreGeneratedPattern = Calculated
Run Code Online (Sandbox Code Playgroud)

编辑:

对不起,只有一行代码的答案,但我最后一天真的很着急。

要让 EF 设置属性的 db 默认值,最快的方法是打开您的 .edmx 设计器,单击感兴趣的字段并设置

StoreGeneratedPattern = 计算

在其属性中(您可以在第二个屏幕截图中看到此属性,您将“默认值”设置为 true)。