【问题标题】:update computed column in nhibernate code first首先更新 nhibernate 代码中的计算列
【发布时间】:2016-03-20 12:28:14
【问题描述】:

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

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

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

【问题讨论】:

  • 它是一个计算列,你为什么要手动更新它?就像有一列返回2 + 4 的值并试图将其设置为10,这没有意义......我认为它甚至不应该有一个set 方法,但我' m 习惯使用 EF...
  • 我没有更新那一栏。它正在自动更新。如果我没有设置它不会在我的 UI 中显示该属性的值

标签: c# nhibernate calculated-columns


【解决方案1】:

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

根据MSDN

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

【讨论】:

  • 我没有更新那一栏。它会自动更新
【解决方案2】:

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

public virtual bool? IsInternal { get; set; }

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2017-01-13
    相关资源
    最近更新 更多