2012-10-10 29 views
0

我可能會離開這裏,這個問題可能與主觀接近,但是無論如何這裏有。列表到數據庫

目前我用IList<T>從內存中的數據庫中緩存信息,所以我可以使用LINQ來查詢他們的信息。我有一個ORM'ish層,我已經在SO的一些問題的幫助下編寫,以便從數據庫中輕鬆查詢我需要的信息。例如:

IList<Customer> customers = DB.GetDataTable("Select * FROM Customers").ToList<Customer>(); 

它一直工作正常。我也有擴展方法來對這些列表中的單個項目執行CRUD更新:

DB.Update<Customer>(customers(0)); 

再次運行得非常好。

現在在我的應用程序的GUI層,特別是當綁定DataGridView的用戶編輯數據時,我發現自己繞過這個DAL層,並直接使用TableAdapters內的形式打破分層架構的氣味有點給我。我還發現,我在這裏使用的是TableAdaptersILists,在我的代碼中存在不同的標準,我希望將它們合併爲一個。

理想情況下,我希望能夠綁定到這些列表,然後讓DAL爲我更新列表的「髒」數據。對我來說,這個過程將涉及以下內容:

  1. 遍歷列表中的任何「髒」項目
  2. 對於這些,看看是否存在與在DB
  3. 如果PK的項目(2),然後更新,否則插入
  4. 最後,執行Delete FROM * WHERE ID NOT IN('all ids in list')查詢

我不能完全肯定這是如何在TableAdapter處理,但我可以看到這個方法的性能下降顯隨着清單上的項目越來越多,這種情況非常迅速而且很快。

所以我的問題是這樣的:

是否存在的承諾清單數據庫更簡單的方法?請注意單詞commit,因爲它可能是插入/更新或刪除。

我是否應該轉換爲DataTable?例如here

我確定一些更高級的ORM會執行這種類型的事情,但是有沒有可以爲我做這個的迷你ORM(例如dapper/Petapoco/Simple.data等)?我想保持簡單(就像我現在的DAL一樣)和靈活的(如果它能完全滿足我的需求,我不介意編寫SQL)。

+0

有沒有令人信服的理由,您沒有使用功能豐富的ORM?你在做什麼聽起來很不方便。 –

+0

是的,我開始認爲這可能是最好的 – Simon

+1

從零開始構建自定義的ORM非常誘人並且容易陷入。您現在處於轉折點,最好停止開發您的自定義ORM,並且如果可以,請使用真正的ORM。現代ORM已經很好地解決了許多複雜的問題,重新發明輪子不可能符合客戶的最佳利益。 –

回答

1

目前我使用IList從內存中的數據庫緩存信息,所以我可以使用LINQ來查詢他們的信息。

Linq還有一個叫做Linq-to-Datasets的部門,所以這不是一個令人信服的理由。

更好地決定你真正想要/需要:

  • 一個完整的ORM像實體框架
  • 使用數據集與DataDapters
  • 使用基本ADO.NET(DataReader的和List <>)和實現自己的變化跟蹤。

你可以在一定程度上混合使用它們,但如你所說,最好選擇一個。

+0

感謝Henk,我沒有意識到我可以繞過整個緩存列表。所以我想我可以使用DataSets來存儲緩存的信息,但是當我需要的時候,仍然會映射到POCO的retreive信息。 – Simon

+0

也許對數據集的第二個想法...... ORM最好在這裏 – Simon