首先更新nhibernate代码中的计算列

本文关键字:计算 代码 更新 nhibernate | 更新日期: 2023-09-27 18:26:50

我首先使用nhibernate代码,我有一个计算列。

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public virtual bool? IsInternal { get; set; }

当我尝试更新我的对象时,我收到一个错误:无法修改列"IsInternal",因为它是计算列或是UNION运算符的结果。

首先更新nhibernate代码中的计算列

我应该在属性映射上将update和insert设置为false,这将解决这个问题

public virtual bool? IsInternal { get; set; }
Map.Property(p => p.IsInternal, u =>
            {
                u.Update(false);
                u.Insert(false);
            });

计算列不需要任何更新(在大多数情况下,不持久化)。它总是在需要的时候快速计算。这就是您出现此错误的原因。

根据MSDN:

计算列是未物理存储在中的虚拟列表,,除非该列标记为PERSISTED。计算列表达式可以使用其他列中的数据来计算它所属的列。可以为使用SQL Server管理在SQL Server 2016中计算列Studio或Transact-SQL。