NHibernate Code First中更新计算列

3

我正在使用NHibernate Code First,并且我的表中有一个计算列。

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

当我尝试更新对象时,出现错误: 无法修改“IsInternal”列,因为它要么是计算列,要么是UNION运算符的结果。

它是一个计算列,为什么你要手动更新它呢?这就像有一列返回2 + 4的值,然后尝试将其设置为10,这是没有意义的......我认为它甚至不应该有一个set方法,但我习惯于使用EF... - Ron Beyer
我不更新那个列。它会自动更新。如果我没有设置,它就不会在我的用户界面中显示该属性的值。 - Fereshteh Rabet
2个回答

2

我应该在属性映射中将更新和插入设置为false,这样就可以解决这个问题。

public virtual bool? IsInternal { get; set; }

Map.Property(p => p.IsInternal, u =>
            {
                u.Update(false);
                u.Insert(false);
            });

1

计算列不需要更新(在大多数情况下,不持久化)。它总是在需要时即时计算。这就是为什么你会得到这个错误。

根据MSDN:

计算列是一个虚拟列,除非该列被标记为PERSISTED,否则不会在表中物理存储。计算列表达式可以使用其他列的数据来计算其所属的列的值。您可以使用SQL Server Management Studio或Transact-SQL为SQL Server 2016指定计算列的表达式。


我不会更新那一列。它是自动更新的。 - Fereshteh Rabet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接