2012-01-25 26 views
1

2009年,我開始重新編寫我們最古老的VB6應用程序之一。我通過編寫.NET 3.5中的WCF服務開始將數據從SQL Server 2005數據庫中提取出來並存儲在那裏。我有一個在VB6中編寫的類似COM +組件,它通過網絡以數組的形式傳輸數據。在2009年,我想我會使用ADO.NET DataSets。有沒有更好的方式獲取本地保存的數據?

快3年到現在。事情就這樣發生了,雖然我在2009年開始這個項目,但其他緊迫的項目和問題總是把它推到了後面。現在,我正試圖從我離開的地方接走。我們的設計是將數據從後端SQL Server數據庫中提取出來,然後將其存儲在SQL Express數據庫中。

用戶機器上的應用程序將針對本地SQL Express數據庫運行,並且只在用戶完成後纔將其傳輸到後端服務器。他們的用戶可能會離開現場去工作,並且在返回上傳數據之前會離開相當長的時間(幾個月)。在這段時間裏,我試圖學習實體框架,以便用於本地數據存儲。

這很酷,使用LINQ針對實體對象的整個想法等等。但是,我正努力通過一種方式來快速編寫從舊WCF服務帶回的數據集中的數據傳輸到本地實體類。我可以從返回的數據集/數據表中描繪每個表中的每一列,但WOW,這是很多工作!

有沒有更快的方法來做到這一點?

回答

1

爲此嘗試使用Automapper。 Automapper可以從IDataReader映射,所以你可以做些事情是這樣的:

Mapper.CreateMap<IDataReader, YourEntity>(); 
Mapper.Map<IDataReader, IList<YourEntity>>(dataTable.CreateDataReader()); 

如果實體字段匹配的數據表列,這應該是所有你需要做的,但Automapper確實允許更先進的映射配置如果你需要的話。

+0

我從來沒有聽說過AutoMapper,感謝您的鏈接。只是爲了澄清,我已經有幾個來自WCF服務的表格,它們需要映射到EF實體。我是否在同一例程中爲每個Mapper創建Mapper.CreateMap <>和Mapper.Map <>?還是在自己的日常工作中做得更好?我有點不確定Mapper對象的範圍,它的上下文等。 – Rod

+0

@Rod,你需要爲每個實體調用'CreateMap'。如果你的'DataTable'到實體映射不是1:1,你將不得不做一些配置(我一直保持簡單,所以除了調用'CreateMap'之外,我不必做太多的事情,但是有一些例子網站和示例代碼)。我相信映射是靜態的,所以在你的客戶端你可以在一個位置完成所有的映射。 –

+0

謝謝@adrift。 – Rod

相關問題