如何防止 EF Core 3.1 中的列更新? [英] How to prevent a column update in EF Core 3.1?

查看:31
本文介绍了如何防止 EF Core 3.1 中的列更新?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我从 .Net Core 2.2 升级到 3.1,但此功能已被弃用

I upgraded from .Net Core 2.2 to 3.1 and this functionality has been deprecated

modelBuilder
.Entity<Order>()
.Property(e => e.CreationTime)
.ValueGeneratedOnAddOrUpdate()
.Metadata.IsStoreGeneratedAlways = true;

我需要 EF 来执行插入但阻止更新.

I need EF to do the Insert but block the update.

谢谢!

推荐答案

根据废弃的属性 实施:

public virtual bool IsStoreGeneratedAlways
{
    get => AfterSaveBehavior == PropertySaveBehavior.Ignore || BeforeSaveBehavior == PropertySaveBehavior.Ignore;
    set
    {
        if (value)
        {
            BeforeSaveBehavior = PropertySaveBehavior.Ignore;
            AfterSaveBehavior = PropertySaveBehavior.Ignore;
        }
        else
        {
            BeforeSaveBehavior = PropertySaveBehavior.Save;
            AfterSaveBehavior = PropertySaveBehavior.Save;
        }
    }
}

等效代码应将 BeforeSaveBehaviorAfterSaveBehavior 设置为 Ignore.

the equivalent code should set BeforeSaveBehavior and AfterSaveBehavior to Ignore.

此外,由于 BeforeSaveBehaviorAfterSaveBehavior 属性已被替换为 Get/Set 方法对,因此需要引入一个临时变量来保存属性元数据.

Also since BeforeSaveBehavior and AfterSaveBehavior properties have been replaced with Get / Set method pairs, it would require introducing a temporary variable to hold the property metadata.

像这样:

var creationTime = modelBuilder
    .Entity<Order>()
    .Property(e => e.CreationTime)
    .ValueGeneratedOnAddOrUpdate()
    .Metadata;
creationTime.SetBeforeSaveBehavior(PropertySaveBehavior.Ignore);
creationTime.SetAfterSaveBehavior(PropertySaveBehavior.Ignore);

这篇关于如何防止 EF Core 3.1 中的列更新?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆