EFを使用してデータベースからレコードを取得し、その値をDTOクラスに割り当てたいとします.Linqクエリでは次の表を参考にしてください。Linqクエリ結果をDTOクラスにマッピング
TableAの、TableBの、各テーブルAのレコードの表C
は、TableBの中に複数のレコードがあります。各TableBレコードには、TableCに複数のレコードがあります。今
foreach (var dataitem in query)
{
TableA_DTO dto = new TableA_DTO();
dto.tableA_rowid = dataitem.ID;
//remaining field definitions here
}
: 今私の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クエリのように見えるがそうのようなクエリ結果内の項目を私のマッピングクラスIのループでは、この
var qry = from ent in TableA
select ent;
ようになりますこれは、データベースから1つのレコードを取り出し、テーブルTableAの各フィールドのTableA_DTOに必要なプロパティを設定する、TableAのすべてのフィールドで機能します。私はまた、TableBプロパティのフィールドにTableBプロパティのフィールドにTableB_recordsという名前のすべての一致するレコードを、TableB_recordsという名前で、またTableB_DTOにTableC_recordsという名前でTableB_DTOのプロパティでTableCからのすべての一致するレコードを取り込みたいとします。
これはできますか?私は何を変更する必要がありますか?それは私がファクトリメソッド、すなわちになるだろう
Entity Framework POCO(別名DbContext、時に誤ってコードファーストと呼ばれる)を使用できない理由はありますか?基本的には、DTOの必要性を排除し、代わりにEF POCOを使用できますか? – JMarsch
AutoMapperの使用を検討しましたか?あなたのDTOがどのように違うかによって、これはマッピングを行うための2行または3行のコードと同じくらい簡単です。 – Robaticus
@jMarsch:データベースはすでにそこにありますので、edmxの方法で行っています – user20358