1

我有一个名为“MyTable”的 SQL Server 表,其中包含 3 个整数列:column1、column2 和 column3。column3 是计算列,计算表达式:

case
when column1>column2 then 1
else 2
end

假设我的表只有一行的值 (300, 50, 1)

现在假设我有以下 LINQ 代码:

MyTable t = db.MyTables.First();
t.column1=5;
Console.Write("Computed Value = " + t.comlumn3);
db.SubmitChanges();

书面输出是什么?1 还是 2?换句话说,计算列的值是否在我的代码中自动更新,甚至在我“提交更改”之前;

先感谢您。

4

1 回答 1

1

不,计算列(当您在数据库中声明时)仅由数据库评估(即它只会在保存/重新加载后具有正确的值)。

如果您希望立即在代码中对其进行评估,并且不希望将计算列存储在数据库中,则可以将数据类型中的 column3 更改为计算 getter 中值的属性。

[NotMapped]
public int column3 { get { return column1>column2 ? 1 : 2 } }

如果您使用的是 EF,则需要将其添加[NotMapped]到添加的属性中,以避免 EF 尝试将其存储在数据库中。

于 2012-09-08T13:47:23.670 回答