在使用 EF 的時候,EntityFramework.Extended 的作用:使 轉換為 ,這樣使我們在修改實體對象的時候,避免先查詢再修改,而是直接 Update,大致寫法: 但有時候,我們還有一種操作,就是在實體屬性值的基礎上,進行加減操作,不要被上面的 嚇到(誤以為只能賦新值),其實用 En
在使用 EF 的時候,EntityFramework.Extended 的作用:使IQueryable<T>
轉換為update table set ...
,這樣使我們在修改實體對象的時候,避免先查詢再修改,而是直接 Update,大致寫法:
IQueryable<Entity> entities = _entityRepository.GetAll();
entities = entities.Where(x => x.Id == 1);
await entities.UpdateAsync(x => new Entity { Count = 666 });
但有時候,我們還有一種操作,就是在實體屬性值的基礎上,進行加減操作,不要被上面的new Entity
嚇到(誤以為只能賦新值),其實用 EntityFramework.Extended 實現很簡單,代碼示例:
IQueryable<Entity> entities = _entityRepository.GetAll();
entities = entities.Where(x => x.Id == 1);
await entities.UpdateAsync(x => new Entity { Count = x.Count + 1 }); //在這裡。
生成的 SQL 代碼:
UPDATE [dbo].[Entity] SET
[Count] = [Count] + 1
FROM [dbo].[Entity] AS j0 INNER JOIN (
SELECT
[Extent1].[Id] AS [Id]
FROM [dbo].[Entity] AS [Extent1]
WHERE (1 = CAST( [Extent1].[Id] AS int)) AND (1 = [Extent1].[Id])
) AS j1 ON (j0.[Id] = j1.[Id])
稍微有點複雜,如果去掉INNER JOIN
多餘代碼就好了。