我正在使用NHibernate Code First,并且我的表中有一个计算列。
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public virtual bool? IsInternal { get; set; }
当我尝试更新对象时,出现错误: 无法修改“IsInternal”列,因为它要么是计算列,要么是UNION运算符的结果。
我正在使用NHibernate Code First,并且我的表中有一个计算列。
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public virtual bool? IsInternal { get; set; }
我应该在属性映射中将更新和插入设置为false,这样就可以解决这个问题。
public virtual bool? IsInternal { get; set; }
Map.Property(p => p.IsInternal, u =>
{
u.Update(false);
u.Insert(false);
});
计算列不需要更新(在大多数情况下,不持久化)。它总是在需要时即时计算。这就是为什么你会得到这个错误。
根据MSDN:
计算列是一个虚拟列,除非该列被标记为PERSISTED,否则不会在表中物理存储。计算列表达式可以使用其他列的数据来计算其所属的列的值。您可以使用SQL Server Management Studio或Transact-SQL为SQL Server 2016指定计算列的表达式。
2 + 4
的值,然后尝试将其设置为10
,这是没有意义的......我认为它甚至不应该有一个set
方法,但我习惯于使用EF... - Ron Beyer