我先使用nhibernate代码并且我有一个计算列。更新nhibernate代码中的计算列第一个
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public virtual bool? IsInternal { get; set; }
当我试图更新我的目标,我收到了一个错误: 列“IsInternal”不能被修改,因为它要么是一个计算列,或者是UNION运算符的结果。
我先使用nhibernate代码并且我有一个计算列。更新nhibernate代码中的计算列第一个
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public virtual bool? IsInternal { get; set; }
当我试图更新我的目标,我收到了一个错误: 列“IsInternal”不能被修改,因为它要么是一个计算列,或者是UNION运算符的结果。
我应该设置更新和插入假的属性映射,它会解决这个问题
public virtual bool? IsInternal { get; set; }
Map.Property(p => p.IsInternal, u =>
{
u.Update(false);
u.Insert(false);
});
计算列不需要任何更新(在大多数情况下,不保留)。它总是在需要时即时计算。这就是你得到这个错误的原因。
根据MSDN:
A computed column is a virtual column that is not physically stored in the table, unless the column is marked PERSISTED. A computed column expression can use data from other columns to calculate a value for the column to which it belongs. You can specify an expression for a computed column in in SQL Server 2016 by using SQL Server Management Studio or Transact-SQL.
我没有更新该列。它会自动更新 –
其计算列,你为什么要手动更新呢?它就像有一个返回'2 + 4'值的列并试图将其设置为'10',这没有任何意义......我不认为它应该有一个'set'方法,但我习惯于使用EF ... –
我没有更新该列。它会自动更新。如果我没有设置它不会显示该属性在我的用户界面中的值 –