В моем коде вызывается функция ExecuteUpdateAsync() следующим образом, а переменная dto является входным параметром во время вызова функции.
Код: Выделить всё
public async Task MyFunc(CustomType dto)
{
// some existing code...
if (await Data.MyTable
.Where(e => e.id == dto.id)
.ExecuteUpdateAsync(e => e
.SetProperty(p => p.Value, p => dto.Value ?? p.Value)) != 1)
throw;
// some existing code...
}
Я пытался просмотреть сгенерированную команду SQL, но похоже, что valueExpression оценивается перед генерацией SQL, что приводит к команде UPDATE нет вызова оператора COALESCE() (т. е. что-то вроде UPDATE "MyTable" SET "Value" = WHERE MyTable.Id" == @__dto_Id_1).
Если бы я вместо этого передал что-то следующим образом в вызове функции SetProperty():
Код: Выделить всё
public async Task MyFunc(CustomType dto)
{
// some existing code...
if (await Data.MyTable
.Where(e => e.id == dto.id)
.ExecuteUpdateAsync(e => e
.SetProperty(p => p.Value, p => p.Value ?? dto.Value)) != 1)
throw;
// some existing code...
}
Код: Выделить всё
UPDATE "MyTable"
SET "Value" = COALESCE(MyTable."Value", @__dto_Value_1
WHERE MyTable."Id" == @__dto_Id_1
Подробнее здесь: https://stackoverflow.com/questions/798 ... e-lambda-e
Мобильная версия