我想使用EF從數據庫獲取記錄並將值分配給DTO類。請考慮Linq查詢的以下表格。將Linq查詢結果映射到DTO類
表A,表B,表C
對於每個表A記錄有TableB中多條記錄。對於每個TableB記錄,TableC中有多個記錄。 現在我的DTO的這個樣子
public class TableA_DTO
{
public int tableA_rowid { get; set; }
//remaining tableA field definitions
public List<TableB_DTO> TableB_records { get; set; }
}
public class TableB_DTO
{
public int tableB_rowid { get; set; }
//remaining tableB field definitions
public List<TableC_DTO> TableC_records { get; set; }
}
public class TableC_DTO
{
public int tableC_rowid { get; set; }
//remaining tableC field definitions
}
我的LINQ查詢看起來查詢結果是這樣的
var qry = from ent in TableA
select ent;
在我的映射類我遍歷項目,像這樣:
foreach (var dataitem in query)
{
TableA_DTO dto = new TableA_DTO();
dto.tableA_rowid = dataitem.ID;
//remaining field definitions here
}
現在這適用於TableA中的所有字段,它從數據庫中提取一條記錄,併爲表TableA中的每個字段在TableA_DTO中設置所需的屬性。我還希望在TableA屬性字段中通過名稱TableB_records填充TableB屬性字段中的所有匹配記錄,並且還在TableB_DTO中填充TableB_DTO屬性中TableC的所有匹配記錄名稱TableC_records
可以這樣做嗎?我需要改變什麼?難道LINQ查詢或我做我的映射
感謝您的時間的方式......
是否有任何理由不能使用實體框架POCO(又名DbContext,有時錯誤地稱爲Code First)?基本上,你能否消除對DTO的需求,並使用EF POCO? – JMarsch 2012-02-17 17:56:21
您是否考慮過使用AutoMapper?根據您的DTO的不同,這可能與執行映射的兩行或三行代碼一樣簡單。 – Robaticus 2012-02-17 19:47:51
@jMarsch:數據庫已經存在,所以去了edmx的方式 – user20358 2012-02-18 07:27:57