この質問にはすでに答えがあります。
示されているように、選択されたコンパイル済みクエリーを作成していますここに
しかし、私の質問は、InsertとUpdateのコンパイル済みクエリを作成する方法です。
挿入クエリは
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();
コードのどの部分をスピードアップしたいですか?最初の7行は、Linq自体とは関係ありません。 8行目db.tbl_desc_indexes.InsertOnSubmit(tabledesc);
参照を渡すだけです。
すべての大変な作業を行うステートメントは、
db.SubmitChanges();
それは基本的に2つのことをします:どの挿入と更新がデータベースに送信されるべきかを見つけて、それらを送信します。 2番目のステップの一部である実際のステートメントの生成は、特に挿入ステートメントに対して非常に効率的です。更新ステートメントの場合、どの列が更新されたかによって異なる更新ステートメントが生成されるため、生成はより複雑になります(つまり、オーバーヘッドが発生します)が、ネットワーク使用率が向上し、多くの場合SQL Serverによる実行が速くなります。
あなたができる唯一のことは、あなたの特定のニーズに合わせて作られた挿入と更新(そして削除)のためのストアドプロシージャを作成することです。それらがより速いだろうという保証はありませんが、試すことができます。
とはいえ、状況によっては、更新または削除のセット操作、つまり一度に複数の行を更新または削除することで、パフォーマンスが大幅に向上することがあります。ストアドプロシージャはその時のやり方です。
Server.HtmlEncode
電話?彼らは私には意味をなしません。これらのCookieに整数が含まれている場合や、使用していない場合には、特に有用なことは何もしません。それとも私は何かが足りないのですか? - Kris Vandermotten