gpt4 book ai didi

entity-framework - 如何在 EF 代码优先 4.3 中为 CreatedDate 列使用数据库默认值?

转载 作者:行者123 更新时间:2023-12-04 20:17:17 27 4
gpt4 key购买 nike

我想要一个 CreatedDate我的专栏 Accounts表,定义如下:

CreatedDate DATETIME NOT NULL DEFAULT GETUTCDATE()

这将映射到类中的 CreatedDate 属性:
public class Account
{
public DateTime? CreatedDate { get; private set; }
// ... other properties ...
}

创建新帐户时,我希望将 CreatedDate 设置为 NULL,并让数据库填充它。从数据库加载现有帐户时,我希望 EF 检索数据库生成的 CreatedDate。

我使用 EF 4.3 code-first 和显式迁移。当EF为Accounts表生成迁移时,我修改如下:
CreatedDate = c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"),

不幸的是,当我尝试使用 EF 4.3 映射表时,EF 尝试在 CreatedDate 列中插入值 NULL。

我尝试为该属性设置 DatabaseGeneratedOption.Identity, as suggested by Ladislav Mrnka .但是,这会从主键属性中删除标识选项。我尝试使用 DatabaseGeneratedOption.Computed 代替,但它继续尝试插入 NULL。我恢复了所有迁移并重新运行它们 - 问题仍然存在。

这是我在 OnModelCreating 中所做的事情:
modelBuilder.Entity<Account>().Property(a => a.CreatedDate)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);

有没有人有什么建议?

谢谢你的帮助,
理查德

最佳答案

使您的日期在实体中不可为空或在数据库中不可为空。仅当插入语句不发送显式值时才使用数据库默认值。在 EF 的情况下,只有在您标记 CreatedDate 时才会发生这种情况。与 DatabaseGeneratedOption.Identity .如果它从您的主键中删除默认标识,则通过数据注释或 fluent API 手动强制它。

关于entity-framework - 如何在 EF 代码优先 4.3 中为 CreatedDate 列使用数据库默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10711748/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com