Entity Framework Core
实体框架数据访问技术的轻量型、可扩展、开源、跨平台版本。
50 个问题
我按如下方式配置我的模型:
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
欢迎来到 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();
我仍然在数据库中得到当前日期:
如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。
注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。