LINQ和计算列:它们的值何时更新?

时间:2012-09-08 13:41:02

标签: linq calculated-columns

我有一个名为“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?换句话说,即使在“提交更改”之前,我的代码中的计算列的值是否自动更新;

提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

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