EF批量新增,刪除,修改的擴充套件

2022-03-18 04:01:57 字數 2548 閱讀 1257

在ef各版本中,沒有相應批量的新增,刪除,修改,在用orm 處理資料時直有個尷尬。在網上,也接到了很多網友的詢問這方面的情況,特此今天把這方面的相關擴充套件分享一下,(這裡只做批量刪除的例子,新增和修改的思路雷同)

一、原由

在先前的sql操作中,我們要

update table set  cl=1 where  id>5 and id<100

delete from table where id>5 and id<100

但是在ef中沒有提供相應的介面,我們只能這樣

//批量

刪除foreach(var user in context.table.where(u => u.id>5 and id<100).tolist())

本來一句sql可以解決的問題,現在變得複雜了。

二,擴充套件思路

雖然ef沒有提供的介面中,不過我們可以進行乙個擴充套件(ef裡面是指定自己sql語句 context.database.executesqlcommand(sql,args)),思路是這樣的

通過ef擴充套件 生成 sql語句 讓ef來執行sql

三,具體實現**(自己擴充套件的實現,具體看原始碼)

1.應用**

dbdb = new db();

db.remove(u => u.id>5 and id<100);

2.**分析

dbdb = new db();//這例項化乙個context類,這類裡封裝了ef方法及擴充套件

db.remove(u => u.id>5 and id<100);//這裡主要執行了三個操作,1.確認是哪個表,2,lambda生成sql,這裡用到了conditionbuilder類,partialevaluator類來解析成sql

以上是partialevaluator裡的部分解析**

public

void

build(expression expression)

protected

override

expression visitbinary(binaryexpression b)

this

.visit(b.left);

this

.visit(b.right);

string right = this

.m_conditionparts.pop();

string left = this

.m_conditionparts.pop();

string condition = string.format("

( )

", left, opr, right);

this

.m_conditionparts.push(condition);

return

b; }

protected

override

expression visitconstant(constantexpression c)

}}", this.m_arguments.count - 1

));

return

c; }

protected

override

expression visitmemberaccess(memberexpression m)

]", propertyinfo.name));

return

m; }

3.組裝sql

///

///刪除擴充套件[優化刪除]

/// public

static

int deleteentity(this efdbcontextcontext, expressionbool>> predicate) where entity : class

,ientity

public

static commsql getdeletesql(this efdbcontextcontext, expressionbool>> predicate, bool isfag) where entity : class

,ientity

}if (args.count() > 0

)

commsql cmd = new

commsql();

cmd.text =commtext;

if(isfag)

cmd.comnum =context.database.executesqlcommand(com.text, com.args);

return

cmd;

}private

static command getcommands(expressionbool>> predicate) where entity : class

,ientity

;}

以上只是部分**,詳細看擴充套件**及實現例子

Mybatis SQL實現批量新增,修改,刪除紀要

mybatis實現批量新增,修改,刪除?背景 基礎的操作往往經常用到,時常會除錯,為了以後使用方便,特此紀要.說明 主要是對foreach,trim等標籤的應用.是完成上述操作的重心.問題 mybatis如何實現sql處理批量新增,修改,刪除?前情提要 首先了解一下foreach和trim都有那些屬...

mybatis批量修改,批量新增

mybatis批量修改 批量新增sql語句 1 單個新增 insert into t user user name,mobile values 2 新增並返回主鍵 keyproperty的屬性是要返回的主鍵欄位的名稱 insert into t user user name,mobile value...

hibernate批量修改,批量刪除

在hibernate應用中如何處理批量更新和批量刪除?批量更新是指在乙個事務中更新大批量資料,批量刪除是指在乙個事務中刪除大批量資料。以下程式直接通過hibernate api批量更新customers表中年齡大於零的所有記錄的age欄位 tx session.begintransaction it...