使Linq-to-Sql编译的查询用于插入和更新

本文关键字:插入 更新 用于 查询 Linq-to-Sql 编译 | 更新日期: 2024-10-24 14:03:22

我正在进行选择编译查询,如所示

但我的问题是,如何为Insert和Update进行编译查询?

mine插入查询是

DataClassesDataContext db = new DataClassesDataContext();
tbl_desc_index tabledesc = new tbl_desc_index();
tabledesc.ed_journal_id = Convert.ToInt32(Server.HtmlEncode(Request.Cookies["j_id"].Value));
tabledesc.editor_id = Convert.ToInt32(Server.HtmlEncode(Request.Cookies["editorid"].Value));
tabledesc.short_desc = ck1.Text;
tabledesc.abt_journal = ck2.Text;
tabledesc.aim_scope = ck3.Text;
tabledesc.indexed_in = ck4.Text;
db.tbl_desc_indexes.InsertOnSubmit(tabledesc);
db.SubmitChanges();

更新查询为

 DataClassesDataContext db = new DataClassesDataContext();
 var update = db.tbl_desc_indexes.First(p => p.ed_journal_id == Convert.ToInt32(Server.HtmlEncode(Request.Cookies["j_id"].Value)) && p.editor_id == Convert.ToInt32(Server.HtmlEncode(Request.Cookies["editorid"].Value))); 
 update.short_desc = ck1.Text;
 update.abt_journal = ck2.Text;
 update.aim_scope = ck3.Text;
 update.indexed_in = ck4.Text;             
 db.SubmitChanges();

使Linq-to-Sql编译的查询用于插入和更新

您希望加快代码的哪一部分?前七行与Linq本身无关。第8行,db.tbl_desc_indexes.InsertOnSubmit(tabledesc);只是传递一个引用。

做所有艰苦工作的声明是

db.SubmitChanges();

这基本上做了两件事:找出应该向数据库发送哪些插入和更新,并发送它们。作为第二步的一部分,生成实际语句是非常有效的,尤其是对于插入语句。在更新语句的情况下,生成更复杂(即有一些开销),因为它根据更新的列生成不同的更新语句,但结果是网络使用效率更高,SQL Server通常执行速度更快。

您唯一能做的就是创建用于插入和更新(以及删除)的存储过程,以满足您的特定需求。虽然不能保证这些会更快,但你可以尝试和测量。

也就是说,在某些情况下,通过执行更新或删除的设置操作,即一次更新或删除多行,可以获得非常显著的性能提升。存储过程就是这样。