我有一个名为“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?换句话说,即使在“提交更改”之前,我的代码中的计算列的值是否自动更新;
提前谢谢。
答案 0 :(得分:1)
不,计算列是(当你在数据库中声明时)只由数据库评估(即在保存/重新加载后它只有正确的值)。
如果您希望在代码中立即对其进行评估,并且不希望计算列存储在数据库中,则可以将数据类型中的column3更改为计算getter中值的属性。
[NotMapped]
public int column3 { get { return column1>column2 ? 1 : 2 } }
如果您正在使用EF,则需要将[NotMapped]
添加到添加的属性中,以避免EF尝试将其存储在数据库中。