EF Core:有条件计算的列

时间:2019-07-06 10:12:29

标签: asp.net-core entity-framework-core ef-core-2.1

在我的模型中,我具有AccountType属性,该属性主要由数据库触发器生成,但有时也可以直接分配:

public class Account
{
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public int AccountType { get; set; }
}

[databaseGenerated]属性使我可以在执行databaseContext.SaveChanges()时自动获取数据库生成的值。 但是,如果出现以下情况,此属性似乎也无法发送值: 我希望明确分配AccountType。实现这种“部分”生成/计算列的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

  

但是,如果我希望显式分配AccountType,则该属性似乎也无法发送值。实现这种“部分”生成/计算列的最佳方法是什么?

如果要为用[DatabaseGenerated(DatabaseGeneratedOption.Computed)]装饰的属性设置显式值,则需要下拉至较低级别的元数据API并按如下所示设置AfterSaveBehavior / BeforeSaveBehavior: / p>

  1. IMutableProperty.BeforeSaveBehavior Property用于添加状态

    modelBuilder.Entity<Test>()
             .Property(t => t.TestType)
             .Metadata.BeforeSaveBehavior=PropertySaveBehavior.Save;
    
  2. IMutableProperty.AfterSaveBehavior Property用于更新状态

    modelBuilder.Entity<Test>()
             .Property(t => t.TestType)
             .Metadata.AfterSaveBehavior =PropertySaveBehavior.Save;
    

PropertySaveBehavior指示实体框架更改跟踪将如何处理对属性值的更改,而实体框架更改跟踪又将确定是否将值集发送到数据库。