2009-06-15 145 views
0

我在我的數據庫中有一個包含2行員工數據的表。將數據庫行轉換爲對象

........... 

ID | Name 

........... 

1 | Jon Doe 

2 | Jane Doe 

........... 

我需要這在我的代碼,就這樣,因爲代碼。我需要將其轉換成:

Employee e1 = new Employee(); 
e1.ID = 1; 
e1.Name = "Jon Doe"; 

Employee e2 = new Employee(); 
e2.ID = 2; 
e2.Name = "Jane Doe"; 

現在是代碼可以當應用程序在第一次運行保存到數據庫中,從而節省了我從寫1200個對象實例到數據庫中。 因此,我只是需要一些方法,如使用XML)在第一次運行。

這是一個例子,爲什麼我需要它是因爲,我有一個表存儲設置(寬度,高度,網格標籤)等,需要設置爲第一次應用程序運行的第一次 。

我可以通過什麼方式生成這個文件,有沒有可用的工具,或者你會怎麼做?

+0

你正在使用什麼數據庫? – 2009-06-15 13:30:32

+0

sql server 2005 – abmv 2009-06-15 13:37:25

+0

select'Employee e'+ cast(id as varchar)+'= new Employee(){ID ='+ cast(id as varchar)+',Name = @「'+ name +'」};''從你的表 – 2009-06-15 14:59:18

回答

9

在ORM之外執行此操作的正常方法是使用.Create()方法編寫一個EmployeeFactory類,該方法接受DataRow作爲參數並返回一個新的Employee對象。

這樣你就不必用代碼「污染」你的員工類,這樣你就可以以一種很好的可測試的方式保持關注點的分離。

+0

我想這將是一個選項,我想要做一些像powerdesigner會做數據庫的反向工程啊很好 – abmv 2009-06-15 13:01:18

0

你可以使用類似Entity Framework,Linq2SQL,SubSonic,nHibernate等的東西來根據你的數據庫模式生成對象。

2

編輯 我似乎誤解了你的問題。它看起來像你想要的是一個orm映射器,但真正你正在尋找的是類似於MyGeneration,你可以指向一個數據庫並讓它建立你所需要的對象。因爲ORM在這些情況下仍然有用,所以我保留原始答案的其餘部分。

有幾種可用的.Net,如果你在.Net 3或更高版本上開發,比你有一個建立在調用Linq。 Linq入門超出了這個答案的範圍,所以這裏是一個great blog post from Scott Guthrie,它會指導您。另一種微軟產品可以稱爲EntityFramwork,可以找到更多關於這方面的信息here

是一個免費的Hibernate框架的.Net端口,它也完成了工作。

ORM映射器可以很容易地將數據庫數據轉換爲類,但它們會帶來折衷。有關更多信息,請參閱wikipedia條目。

0

有許多ORM工具(如Cody C所建議的那樣)會生成代碼併爲您執行映射。但從這個問題的聲音來看,我認爲這對您的應用程序來說太過分了。如果這是你所需要的,那麼用你的數據訪問(動態sql,存儲過程,視圖等)運行你的查詢,然後簡單地將返回數據中的值映射到你的對象。

這當然不是最優雅的解決方案,但引入第三方工具可能會超出您的需要。

1

爲什麼不從db中選擇這種格式的數據並將其保存到文件中?

對於MySQL我會做(和做):

此查詢保存爲c:\ in.sql

SELECT CONCAT('Employee e', id, ' = new Employee();', char(13), 
     'e', id, '.ID = ', id, ';', char(13), 
     'e', id, '.Name = "', name, '";', 
     char(13), char(13)) as '//generated' from employee; 

和從命令行運行:

mysql -u root <c:\in.sql> c:\out.cs 

這將執行來自in.sql的查詢並將輸出以這種格式輸出到out.cs:

//generated 
Employee e1 = new Employee(); 
e2.ID = 1; 
e2.Name = "..."; 


Employee e2 = new Employee(); 
e2.ID = 2; 
e2.Name = "...";