c# - 创建 Entity Framework 模型时忽略数据库默认值

标签 c# sql-server entity-framework entity-framework-6 ef-database-first

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

CREATE TABLE [dbo].[Test]
(
    [Id]      INT            IDENTITY (1, 1) NOT NULL,
    [Active]  BIT            DEFAULT ((1)) NOT NULL,
)

从该数据库创建 EF 模型时,映射到 Boolean 列的 Active bit 列 具有无默认值(参见属性“默认值”): Property View - Model Diagram

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

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


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

Manually changed default value

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

public Test()
{
}

public Test()
{
    this.Active = true;
}

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

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

最佳答案

试试这个:

StoreGeneratedPattern = Calculated

编辑:

抱歉,我的答案只有一行代码,但我昨天真的很匆忙。

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

StoreGeneratedPattern = 计算

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

关于c# - 创建 Entity Framework 模型时忽略数据库默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40310675/

相关文章:

c# - 选择节点 Linq to Xml C#

c# - 为什么 C# 不允许使用非静态字段的字段初始值设定项?

sql - 在一组两种可能性中选择唯一行

c# - 尝试使用 lambda 表达式检索数据时发生转换错误

performance - 我可以在 Entity Framework 中使用 dapper-dot-net 吗?

c# - 更多 Azure 数据请求,然后我可以通过 Azure 仪表板进行协调

c# - 返回 ISNULL 十进制 "0,00"

php - Ubuntu 21.04 是否与 PHP sqlsrv 驱动程序兼容?

sql - 在 SQL 中获取平均值忽略所有小于 0 的值

c# - Entity Framework 灵活缓存