У меня есть следующий код
var dbContext = Setup.ConfigureDBContext();
var wo = await dbContext.WorkOrders.Where(x => x.WorkOrderID == 88).SingleOrDefaultAsync();
var t = wo.Confidence;
wo.ModifiedDateTime = DateTime.UtcNow;
wo.Confidence = t;
await dbContext.SaveChangesAsync();
. В приведенном выше запросе я присваиваю тот же Confidence
, но при изменении ModifiedDateTime
EF генерируется следующий SQL
exec sp_executesql N'SET NOCOUNT ON;
UPDATE [WorkOrders] SET [ModifiedDateTime] = @p0
WHERE [WorkOrderID] = @p1 AND [VersionStamp] = @p2;
SELECT [VersionStamp]
FROM [WorkOrders]
WHERE @@ROWCOUNT = 1 AND [WorkOrderID] = @p1;
',N'@p1 int,@p0 datetime,@p2 varbinary(8)',@p1=88,@p0='2019-10-09 15:33:06.343',@p2=0x0000000000582A52
Примечание. что EF не включает столбец Confidence
в операторе обновления. Я предполагаю, что EF должен сравнить исходное значение с новым значением и, если есть изменение, включить только эти столбцы в оператор обновления.
Это правильное предположение?
Я спрашиваюэтот вопрос, потому что таблица WorkOrder
также имеет 4 столбца nvarchar (max). Данные в этих столбцах - длинная строка. Если мое предположение верно, то EF также должен сравнить эти 4 столбца, чтобы решить, нужно ли включать этот столбец в запрос на обновление или нет. И это сравнение будет медленнее и может привести к снижению производительности. Тогда я могу создать отдельную спутниковую таблицу только для этих 4 столбцов.