假設我使用Linq to Sql概念與C#語言中的數據庫進行交互,那麼我可能面臨哪些挑戰?意味着在架構,性能,類型安全,對象定位等方面。Linq在點網絡中對SQL概念的挑戰
回答
基本上Linq to SQL爲您的數據庫中的每個表生成一個類,並使用關係屬性和全部屬性完成,因此您將不會遇到類型安全性問題。使用C#partials允許您爲這些對象添加功能,而不會混淆Linq to SQL自動生成的代碼。它工作得很好。因爲表格直接映射到類和對象,所以要麼必須接受域層直接鏡像數據庫設計,要麼必須在Linq to SQL之上構建某種形式的抽象層。對於多對多關係,表格的直接鏡像可能會非常麻煩,但不直接支持 - 而不是Orders.Products
,您會得到Order.OrderDetails.SelectMany(od => od.Product)
。
與大多數其他ORM不同,Linq to SQL不僅僅分配數據庫中的對象,還允許您通過將對象傳遞迴ORM來存儲或更新對象。相反,Linq to SQL會跟蹤從數據庫加載的對象的狀態,並允許您更改已保存的狀態。這很難解釋和理解奇怪 - 我建議你閱讀一些有關這個問題的瑞克斯特拉斯博客。
性能明智Linq-to-SQL的確很不錯。在基準測試中,它顯示的速度大約是原生SQL讀取器提供的速度的90-95%,而且根據我的經驗,真實世界的使用速度也非常快。像所有ORM一樣,Linq to SQL受N + 1選擇問題影響,但它提供了根據上下文指定延遲/加載的好方法。
此外,通過選擇Linq to SQL,您可以選擇MSSQL - 確實存在允許您連接到其他數據庫的第三方解決方案,但上次檢查時沒有一個顯示非常完整。總而言之,Linq to SQL是一個很好的,有點容易學習的ORM,它可以很好的執行。如果您需要的功能超出了Linq to SQL提供的功能,請查看新的實體框架 - 它具有更多功能,但也更復雜。
我們遇到了一些挑戰,主要是向不瞭解數據庫如何工作的程序員打開查詢構建功能。這裏有一些氣味:
//bad scaling
//Query in a loop - causes n roundtrips
// when c roundtrips could have been performed.
List<OrderDetail> od = new List<OrderDetail>();
foreach(Customer cust in customers)
{
foreach(Order o in cust.Orders)
{
od.AddRange(dc.OrderDetails.Where(x => x.OrderId = o.OrderId));
}
}
//no seperation of
// operations intended for execution in the database
// from operations intended to be executed locally
var query =
from c in dc.Customers
where c.City.StartsWith(textBox1.Text)
where DateTime.Parse(textBox2.Text) <= c.SignUpDate
from o in c.Orders
where o.OrderCode == Enum.Parse(OrderCodes.Complete)
select o;
//not understanding when results are pulled into memory
// causing a full table load
List<Item> result = dc.Items.ToList().Skip(100).Take(20).ToList();
另一個問題是,從表結構分離的一個多層次意味着索引甚至容易被忽視(這是與任何ORM的問題雖然)。
- 1. C#LINQ SQL EntityFramework挑戰
- 2. 一個新手的網絡概念
- 3. 挑戰窗口時,企業網絡
- 4. LINQ查詢概念
- 5. Java多人遊戲網絡概念
- 6. Java多人遊戲 - 網絡概念
- 7. SQL視圖 - 挑戰
- 8. SQL問題,挑戰
- 9. 硒中的網格概念
- 10. Python中的浮點概念
- 11. 新建SQL面對空行的挑戰
- 12. 架構挑戰對共享網絡服務
- 13. LINQ中的性能和概念問題
- 14. sql-locks在sqlserver中的概念
- 15. 挑選挑戰4:蟒蛇挑戰
- 16. 「物聯網和社交網絡」的概念演示
- 17. sql groupby語句的概念
- 18. 在遊戲相對概念
- 19. SQL條件連接挑戰
- 20. 短SQL挑戰,通過
- 21. 對多線程概念有點困惑
- 22. 用的ObjectQuery單枚舉挑戰LINQ到實體實體SQL
- 23. 代碼戰挑戰
- 24. 用LINQ挑戰管理範圍
- 25. Iframe相對路徑挑戰
- 26. 遞增挑戰:++對+1
- 27. 的 「drawStars」 挑戰
- 28. Twitter離線網站概念
- 29. SQL概念訂單評估
- 30. A碼的戰爭挑戰
http://freekleemhuis.com/2008/03/26/linq-to-sql-problems/ – 2010-09-04 13:45:42