.net EF核心中的自动计算字段

.net EF核心中的自动计算字段,.net,entity-framework,asp.net-core,entity-framework-core,ef-core-5.0,.net,Entity Framework,Asp.net Core,Entity Framework Core,Ef Core 5.0,使用Ef5,我有以下类要持久化 class Bar { decimal A { get; set; } decimal B { get; set; } decimal Max { get { return Math.Max(A, B); } } decimal? InvA { get { return A == 0 ? null : 1 / A; } } // this is 1/A } 我应该如何使用EF Core来管理它?我试着去做 class Bar { decim

使用Ef5,我有以下类要持久化

class Bar {
  decimal A { get; set; }
  decimal B { get; set; }

  decimal Max { get { return Math.Max(A, B); } }
  decimal? InvA { get { return A == 0 ? null : 1 / A; } } // this is 1/A
}
我应该如何使用EF Core来管理它?我试着去做

class Bar {
  decimal A { get; set; }
  decimal B { get; set; }

  decimal Max { get; private set; }
  decimal? InvA { get; private set; }
}
在配置中,我会这样做

builder.Property(p => p.Max).ValueGeneratedOnAddOrUpdate();
builder.Property(p => p.InvA).ValueGeneratedOnAddOrUpdate();

是否足够且正确?

您可以使用DatabaseGenerated属性注释相应的属性:

public class Bar
{
    public decimal A { get; set; }
    public decimal B { get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public decimal Max { get { return Math.Max(A, B); } }

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public decimal? InvA { get { return A == 0 ? null : 1 / A; } }
}

有关更多详细信息,请参阅。

您可以将其设置为计算列:
.hascutedcolumnsql(“1/[a]持久化”)