2013-12-18 2 views
1

творим выбери скомпилированные запросы, как показано Hereсделать Linq к Sql скомпилированных запросов для вставки и обновление

, но мой вопрос заключается в том, как сделать скомпилированные запросы для вставки и обновления?

шахты Вставка запроса

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(); 
+0

его не дублируется .... как я не знаю, как сделать скомпилированные запросы для вставки и обновления –

+0

@ Джеймс жаль мою ошибку .... Я нашел свой ответ из дублированного вопроса –

+0

Как примечание на стороне, что является ли цель вызовов 'Server.HtmlEncode'? Для меня это не имеет никакого смысла. Они, как правило, не делают ничего полезного в том случае, если эти файлы cookie содержат целые числа, или в случае, если они этого не делают. Или я чего-то не хватает? –

ответ

2

Какая часть кода вы хотите ускорить? Первые семь строк не имеют никакого отношения к Linq per se. Строка 8, db.tbl_desc_indexes.InsertOnSubmit(tabledesc); просто передает ссылку.

Утверждения, что делает всю тяжелую работу является

db.SubmitChanges(); 

Это по существу делает две вещи: выяснить, что вставляет и обновление должно быть отправлено в базу данных, и отправить их. Генерация фактических утверждений, часть второго шага, очень эффективна, особенно для вставок. В случае операторов обновления генерация является более сложной (т. Е. Имеет некоторые накладные расходы), поскольку она генерирует различные операторы обновления в зависимости от того, какие столбцы были обновлены, но эти результаты являются более эффективным использованием сети и часто более быстрым выполнением SQL Server.

Единственное, что вы можете сделать, это создать хранимые процедуры для вставки и обновления (и удаления) с учетом ваших конкретных потребностей. Нет никакой гарантии, что они будут быстрее, но вы можете попробовать и измерить.

С учетом того, что в некоторых ситуациях вы можете добиться очень значительного прироста производительности, выполняя операции установки для обновления или удаления, то есть обновляя или удаляя больше одной строки за раз. Хранимые процедуры - это путь.

+0

ok i еще вопрос есть –

+0

мой выбор-запрос - var rr = editordetail1 (db, 1,2); Это означает, что я хочу передать 2 целых числа в compiledquery, чем то, как я должен был скомпилировать запрос ....? ... public static Func editordetail1 = CompiledQuery.Compile ((DataClassesDataContext db, int a) => от p1 в db.editor_j_infs где p1.ed_journal_id == a orderby p1.editor_id убыв. выберите p1); // Его мой предварительный процесс –

+0

@ Xtremcool, если это последнее замечание является новым вопросом, чем задавать его как вопрос, а не комментарий к этому вопросу. –

Смежные вопросы