【问题标题】:How to prevent a column update in EF Core 3.1?如何防止 EF Core 3.1 中的列更新?
【发布时间】:2020-05-15 13:54:57
【问题描述】:

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

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

我需要 EF 进行插入但阻止更新。

谢谢!

【问题讨论】:

    标签: c# entity-framework-core ef-core-3.0 ef-core-3.1


    【解决方案1】:

    根据官方documentation,IsStoreGeneratedAlways 从 3.1 开始就已经过时了。

    Microsoft.EntityFrameworkCore.Metadata 程序集:

    如果 Throw,则在分配新值时将引发异常 实体存在于数据库中后,添加到该属性。

    如果忽略,则对实体的属性值进行任何修改 数据库中已经存在的将被忽略。

    你应该试试这样的:

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

    【讨论】:

      【解决方案2】:

      根据废弃属性implementation

      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

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

      类似这样的:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-29
        • 1970-01-01
        • 2023-03-21
        • 2018-12-29
        • 2018-04-03
        • 2022-11-11
        • 2021-04-08
        • 2020-08-23
        相关资源
        最近更新 更多