2011-10-24 51 views
4

我有一個「位置」類。這個課程基本上包含地址,因此術語「位置」。我有一個數據表,返回多個記錄,我想成爲「地點」。DataTable的每一行作爲一個類?

現在,我在「位置」類中有一個「加載」方法,它通過ID獲取單個「位置」。但是當我想要從多個數據錶行獲取「位置」對象的集合時,我該怎麼辦?每一行將是一個「位置」。

由於顯而易見的原因,我不想爲每條記錄轉到數據庫。我是否簡單地創建一個位置類的新實例,爲屬性賦值,同時繞過數據表中的行繞過「加載」方法?這對我來說似乎合乎邏輯,但我不確定這是否是正確/最有效的方法。

回答

1

你在正確的軌道上,讓你需要的所有位置一次訪問數據庫在性能方面最好。

要使代碼更簡潔,請製作Location類的構造函數,該構造函數需要DataRow,然後該代碼將相應地設置您的屬性。通過這樣做,您可以將您的映射從列集中到代碼庫中的某個位置,這將很容易維護。

然後,循環訪問數據表中的行並調用構造函數是完全可以接受的。

您也可以使用object to relational mapper,如Entity Framework來進行數據庫交互。

+0

甜。那很完美。不知道爲什麼我沒有想到這一點。 –

2

這就是(你的描述)幾乎是如何將一行(或一組行)的數據映射到一個C#商業對象。但自己節省了大量的工作,你應該考慮一些現有的ORM的一個(對象關係映射)框架,如NHibernateEntity FrameworkCastle ActiveRecord

大多數奧姆斯將實際產生的所有樣板代碼,其中行和字段映射到您的.NET對象屬性,反之亦然。 (是的,ORM允許你像檢索和映射一樣容易地添加,更新和刪除數據庫數據。)請給ORM看一看。少量的學習(每個學習都有一些學習曲線)很快就會得到回報。在涉及RDBMS的任何應用程序中,ORM也變得相當標準化並且確實是預期的。

此外,這些鏈接可能有興趣(ORM相關):

Wikipedia article on ORMs

SO Discussion on different ORMs

Many different .NET ORMs listed

1

創建一個返回IEnumerable的方法。在這種方法中,做你的數據庫的東西,我經常在sqldatareader中傳入位置構造函數。所以,我有這樣的事情

public static IEnumerable<location> GetLocations() 
{ 
    List<location> retval = new List<location>(); 
    using(sqlconnection conn = new sqlconn(connection string here); 
    { 
     sqlcommand command = new sqlcommand(conn, "spLoadData"); 
     command.commandtype=stored proc 
     SqlDataReader reader = command.executereader(); 
     while(reader.read()) 
     { 
      retval.add(new location(reader)); 
     } 
    } 
    return retval; 
} 

明顯的代碼將無法正常工作,但它只是給你一個想法。

但是,如果您有很多事情要做,ORM映射器可以爲您節省大量時間!

相關問題