LINQ и вычисляемые столбцы: когда обновляется их значение?

У меня есть таблица SQL Server под названием «MyTable» с тремя целочисленными столбцами: столбец1, столбец2 и столбец3. 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? Другими словами, значение вычисляемого столбца автоматически обновляется в моем коде еще до того, как я «Отправлю изменения»;

Заранее спасибо.


person Wonder    schedule 08.09.2012    source источник


Ответы (1)


Нет, вычисляемые столбцы (при объявлении в базе данных, как вы делаете) оцениваются только базой данных (т.е. они будут иметь правильное значение только после сохранения/перезагрузки).

Если вы хотите, чтобы он немедленно оценивался в коде, и на самом деле не хотите, чтобы вычисляемый столбец хранился в базе данных, вы можете изменить столбец3 в своем типе данных на свойство, которое вычисляет значение в геттере.

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

Если вы используете EF, вам нужно добавить [NotMapped] к добавленному свойству, чтобы EF не пытался сохранить его в базе данных.

person Joachim Isaksson    schedule 08.09.2012