HasDefaultValueSql(“getutcdate()”).ValueGeneratedOnAdd();未按预期工作

Hui Liu-MSFT 41,146 信誉分 Microsoft 供应商
2024-04-08T08:21:26.73+00:00

我按如下方式配置我的模型:

public class CampaignConfiguration : IEntityTypeConfiguration<Campaign>
{
    /// <inheritdoc />
    public void Configure(EntityTypeBuilder<Campaign> builder)
    {
        builder.HasIndex(new[] { "Name", "StateId" }).IsUnique();
        builder.Property(b => b.Created).HasDefaultValueSql("getutcdate()").ValueGeneratedOnAdd();
    }
}

然后,我运行以下代码(xUnit 测试):

  var daveForPres = new Campaign
        {
            Name = "  Dave for President  ",
            State = colorado
        };
        // the constructor set the Created to now - honk that up before the save.
        daveForPres.SetPrivatePropertyValue("Created", new DateTime(1955, 09, 26));

        context.Campaigns.Add(daveForPres);
        context.SaveChanges();

当我查看数据库(通过 SSRS)时,创建日期设置为 1955-09-26。

为什么在我的模型对象中使用该值?它应该忽略这一点。

Note:此问题总结整理于:HasDefaultValueSql("getutcdate()").ValueGeneratedOnAdd(); not working as expected

Entity Framework Core
Entity Framework Core
实体框架数据访问技术的轻量型、可扩展、开源、跨平台版本。
42 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Jiale Xue - MSFT 35,556 信誉分 Microsoft 供应商
    2024-04-08T08:31:10.1333333+00:00

    欢迎来到 Microsoft Q&A,根据我的测试,我重现了您的问题。如果要 Created,则始终是 的值。我们需要对当前代码做一些额外的操作。getutcdate()

    您可以尝试以下代码:

     modelBuilder.Property(b => b.Created).HasDefaultValueSql("getutcdate()").ValueGeneratedOnAdd().Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Ignore);
    

    根据我的测试,它将忽略新插入的值,但仍使用 .getutcdate()

    如以下代码所示:

    var daveForPres = new Campaign
                {
                    Name = "  Dave for President  ",
                     StateId=1001
                     
                };
                daveForPres.Created = DateTime.Parse("1996-02-20");
                Mycontext mycontext = new Mycontext();
                mycontext.Campaigns.Add(daveForPres);
                mycontext.SaveChanges();
    
    

    我仍然在数据库中得到当前日期:

    用户图像


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助