文章出處

在使用 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多余代碼就好了。


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()