當我有主鍵時使用LINQ刪除數據庫記錄的最佳方法是什麼?最乾淨的語法來刪除linqtosql中的記錄
2
A
回答
2
如果您設置更新檢查在您所有的列上永不或當更改爲時,您可以簡單地使用主鍵附加實例並在不加載的情況下刪除該行。
public void DeleteCustomer(int CustomerID)
{
NorthwindContext c = new NorthwindContext c;
Customer target = new Customer(){CustomerID = CustomerID};
c.Customers.Attach(target);
c.Customers.DeleteOnSubmit(target);
c.SubmitChanges();
}
0
您可以將存儲過程映射到DataContext上的一個方法,該方法刪除具有主鍵給定值的記錄。
0
我一直使用select-delete方法,因爲它非常簡單。正如marxidad所說,如果你真的想要,你可以映射一個存儲過程。我相信ESQL有計劃在未來支持插入,更新和刪除操作。
2
該方法是可接受的和典型的。
這是有點浪費,因爲你要求整個記錄。考慮到DeleteOnSubmit方法簽名,這是無法避免的。
爲什麼LINQ to SQL以這種方式工作?如果您考慮沒有主鍵的表或者使用組合鍵,答案就很明顯。在需要將每個對象屬性與表字段進行匹配的最差情況下,LINQ to SQL需要整個記錄。
但正如應該問的所有性能問題 - 你絕對相信這是一個性能問題?你的簡介證明在哪裏?
我還沒有嘗試過,但可能有一種方法可以實現與DataContext.ExecuteCommand同樣的事情。
1
最後我做一個選擇,但提高了我的語法,我覺得真的是我所關心的:
老:
var products = from p in db.Products select p;
db.Products.DeleteOnSubmit(products.Take(1).Single()); <--seemed nasty
db.SubmitChanges();
新:
Service service = db.Services.Where(s => s.id == serviceID).FirstOrDefault(); <--nicer
db.Services.DeleteOnSubmit(service);
db.SubmitChanges();
1
public static Delete(this ITable table, object key)
{ var t = table.GetType();
var tableName = t.GetCustomAttributes
(typeof(TableAttribute),false)[0].Name;
var primaryKey = (from p in t.GetProperties()
from c in p.GetCustomAttributes
(typeof(ColumnAttribute),false)
where c.IsPrimaryKey
select c.Name).Single();
using (var cmd = table.Context.Connection.CreateCommand())
{ cmd.CommandText = string.Format("DELETE FROM {0} WHERE {1} = @key"
,tableName, primaryKey);
cmd.Parameters.Add(new SqlParameter("@key", key));
cmd.ExecuteNonQuery();
}
}
/* ... */
dataContext.Table1.Delete(id);
相關問題
- 1. 如何幹淨地刪除目錄在我的$ HOME目錄
- 2. Git的乾淨不刪除文件
- 3. Maven的乾淨不刪除文件
- 4. 的MSBuild刪除文件上乾淨
- 5. Mysql語法錯誤:刪除記錄
- 6. 可以maven乾淨刪除已刪除的依賴項?
- 7. 刪除表中不在刪除語句中的記錄?
- 8. Datarepeater刪除只刪除最高記錄
- 9. 乾淨的方法來停止Logstash
- 10. 如何幹淨地刪除ndb屬性
- 11. 乾淨的登錄數據
- 12. 無法得到乾淨的流浪箱「刪除」或「消滅」
- 13. 有沒有辦法在IntelliJ中乾淨地刪除項目?
- 14. 耙乾淨 - 排除子目錄
- 15. 正確的方法來刪除LINQ to Entities中的記錄
- 16. 無法刪除mongodb中的記錄
- 17. 無法刪除sqlite中的記錄
- 18. 無法刪除CloudKit中的記錄
- 19. 無法刪除表中的記錄
- 20. 刪除索引查詢語法中的過期記錄
- 21. From子句中的語法錯誤使用ADO刪除記錄
- 22. 最乾淨的方式來查找列表中的匹配
- 23. 最好的方法來刪除兩個表中有外鍵記錄?
- 24. 刪除最後一天的記錄
- 25. 與最低的ID刪除記錄
- 26. 從localStorage刪除最舊的記錄
- 27. 轉:從切片中刪除多個條目的最快/最乾淨的方法是什麼?
- 28. 處理在Symfony2中刪除記錄的最佳方法
- 29. 從數據庫中刪除記錄時的最佳做法
- 30. 刪除子記錄刪除實體中的父記錄
LINQ與記錄或數據庫完全無關。您正在考慮LINQ to SQL。 – yfeldblum 2008-10-22 03:18:37
這個問題有誤導性。聽起來你很擔心使用低效率這個詞。 – CVertex 2008-10-22 03:51:14
是的,我同意,這是一個思路不清的問題。 – stimms 2008-10-22 03:58:28