1

column1、column2、column3の3つの整数列を持つ「MyTable」というSQLServerテーブルがあります。column3は計算列であり、式を評価します。

case
when column1>column2 then 1
else 2
end

私のテーブルに値(300、50、1)の行が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を、ゲッターの値を計算するプロパティに変更できます。

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

EFを使用している場合は、EF[NotMapped]がデータベースに格納しようとしないように、追加したプロパティに追加することをお勧めします。

于 2012-09-08T13:47:23.670 に答える