asp.net-core - EF Core:条件计算列
问题描述
在我的模型中,我有 AccountType 属性,该属性主要由数据库触发器生成,但有时也可以直接分配:
public class Account
{
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public int AccountType { get; set; }
}
每当执行 databaseContext.SaveChanges() 时,属性 [DatabaseGenerated] 允许我自动获取数据库生成的值。但是,如果我希望明确分配 AccountType,此属性似乎也阻止发送值。实现这种“部分”生成/计算的列的最佳方法是什么?
解决方案
但是,如果我希望明确分配 AccountType,此属性似乎也阻止发送值。实现这种“部分”生成/计算的列的最佳方法是什么?
如果您想为使用 修饰的属性设置显式值[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
,则需要下拉到较低级别的元数据 API 并设置AfterSaveBehavior
/BeforeSaveBehavior
如下所示:
IMutableProperty.BeforeSaveBehavior 属性用于添加状态
modelBuilder.Entity<Test>() .Property(t => t.TestType) .Metadata.BeforeSaveBehavior=PropertySaveBehavior.Save;
IMutableProperty.AfterSaveBehavior 属性用于更新状态
modelBuilder.Entity<Test>() .Property(t => t.TestType) .Metadata.AfterSaveBehavior =PropertySaveBehavior.Save;
PropertySaveBehavior指示实体框架更改跟踪将如何处理属性值的更改,这反过来将确定值集是否发送到数据库。
推荐阅读
- r - 如何在 R markdown 中进行迭代
- python - 无法导入模块:在工作文件中找不到模块,但在另一个文件中工作正常
- javascript - 将 json 添加到 tabledit 选择参数
- python - 如何压缩倍数 np.array_split
- html - 使用边框轮廓和文字效果调整阴影效果
- java - 使用 DataBindingUtil.setContentView(this,R.layout.my_activity_layout)出现错误(java.io.FileNotFoundException)
- java - 尝试在 Adapter AndroidStudio 中对空对象引用调用接口方法
- wordpress - Wordpress 主题编辑器文件权限
- tensorflow - 通过生成器提供输入数据时,在 tensorflow1 中评估自定义层中的张量
- xaml - 如何将 TabbedPage ContentPage 拆分为不同的文件