簡體   English   中英

將DataTable替換為集合的最佳c#泛型類?

[英]Best c# generics class for replacing DataTable as collection?

我正在嘗試將傳統的C#.NET 1.1應用程序帶入現代時代。 我們將DataTables用於我們可能是業務對象的集合。

鑒於大多數代碼都認為它是在與DataRow的接口進行通信,那么什么樣的泛型集合才能實現最不痛苦的過渡?

如果我正確地閱讀你的問題,你要求哪個容器只存儲你的Business對象列表,然后允許你只是枚舉整個集合,或通過索引選擇。

好吧,我會考慮查看List <>

您可以在哪里接受IList <>(訪問索引)或IEnumerable <>(在集合上使用foreach循環)

例如

private void PrintAll<T>(IEnumerable<T> items)
{
    foreach(T item in items)
        Console.WriteLine(item.ToString());
}

現在我可以傳入任何使用IEnumerable <>接口的容器,包括List <>和普通數組

List<Person> people = new List<Person>();
//add some people to the list
PrintAll<Person>(people);

帶有Buiness對象的示例n層應用程序

HTH

骨頭

為什么不將DataTable和DataRow子類化為適合您的業務邏輯的類型,而不是改變DataSet / DataTable API?

對子類DataRow和DataTable對象的支持非常棒。 您將在新代碼中獲得所需的強類型,以及舊代碼的向后兼容性。 此外,您可以在任何需要/想要的地方注入業務邏輯。

如果您習慣使用DataTable ,可能您已經習慣了更改跟蹤和適配器(等)帶來的持久性支持。 在這種情況下,您是否考慮過LINQ-to-SQL和/或Entity Framework? 這些都支持豐富的chaneg跟蹤和自動持久性,同時提供各種其他DAL用例,例如可組合查詢和所有其他LINQ優點。

絕對值得調查。

請注意,更改為鍵入的POCO實體(即不是DataRow或其中的子類)仍然是一個很大的偏差,因此它不會是一個簡單的更改。 如果你沒有時間進行重大改變,堅持使用DataTable (可能是鍵入的)將是務實的。

這將為您提供EntitySet<T>IQueryable<T>等,或者您可以使用List<T>Collection<T>等進行臨時使用。

將“應用程序帶入現代”的最簡單方法是簡單地將代碼從Visual Studio 2003升級到2005或2008.如果您希望向類添加行為(“可能是業務對象”),事實上,DataSet,DataTable和DataRow是作為部分類實現的。

上面提到的解決方案會給你帶來很多損失,包括變更跟蹤,除非你正在尋找的東西 - 在很大程度上偏離。 LINQ to SQL,實體框架等都提供了變更跟蹤,但是在工作單元機制內連接到數據庫,而不是將工作單元跟蹤直接放在對象上,就像DataRow一樣。

希望你不是簡單地改變你的“應用程序進入現代時代”並且你有一些好處,你試圖獲得你放棄的功能和你花費的努力?

順便說一句,這都假設你正在使用Typed DataSet ...在我看來,對於大多數用途來說,無類型的DataSet對象有點愚蠢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM