我可能會離開這裏,這個問題可能與主觀接近,但是無論如何這裏有。列表到數據庫
目前我用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
內的形式打破分層架構的氣味有點給我。我還發現,我在這裏使用的是TableAdapters
和ILists
,在我的代碼中存在不同的標準,我希望將它們合併爲一個。
理想情況下,我希望能夠綁定到這些列表,然後讓DAL爲我更新列表的「髒」數據。對我來說,這個過程將涉及以下內容:
- 遍歷列表中的任何「髒」項目
- 對於這些,看看是否存在與在DB
- 如果PK的項目(2),然後更新,否則插入
- 最後,執行
Delete FROM * WHERE ID NOT IN('all ids in list')
查詢
我不能完全肯定這是如何在TableAdapter
處理,但我可以看到這個方法的性能下降顯隨着清單上的項目越來越多,這種情況非常迅速而且很快。
所以我的問題是這樣的:
是否存在的承諾清單數據庫更簡單的方法?請注意單詞commit,因爲它可能是插入/更新或刪除。
我是否應該轉換爲DataTable
?例如here
我確定一些更高級的ORM會執行這種類型的事情,但是有沒有可以爲我做這個的迷你ORM(例如dapper/Petapoco/Simple.data等)?我想保持簡單(就像我現在的DAL一樣)和靈活的(如果它能完全滿足我的需求,我不介意編寫SQL)。
有沒有令人信服的理由,您沒有使用功能豐富的ORM?你在做什麼聽起來很不方便。 –
是的,我開始認爲這可能是最好的 – Simon
從零開始構建自定義的ORM非常誘人並且容易陷入。您現在處於轉折點,最好停止開發您的自定義ORM,並且如果可以,請使用真正的ORM。現代ORM已經很好地解決了許多複雜的問題,重新發明輪子不可能符合客戶的最佳利益。 –