EF kullanarak veritabanından kayıt almak ve değerleri bir DTO sınıfına atamak istiyorum. Bir Linq sorgusu için aşağıdaki tablolara göz atın.Linq Sorgu sonuçları bir DTO sınıfına dönüştürebilir
TableA, TableB, her TableA kayıt için TableC
TABLEB içinde birden fazla kayıt var. Her bir TableB kaydı için TableC'de birden fazla kayıt vardır. Şimdi
foreach (var dataitem in query)
{
TableA_DTO dto = new TableA_DTO();
dto.tableA_rowid = dataitem.ID;
//remaining field definitions here
}
: Şimdi benim DTOs bu
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
}
benim linq sorgusu gibi bakmak şöyle sorgu sonucundaki öğeler arasında benim haritalama sınıf I döngü bu
var qry = from ent in TableA
select ent;
gibi görünür Bu, TableA'daki tüm alanlar için çalışır ve veritabanından bir kayıt çıkarır ve TableA_DTO'da TableA tablosundaki her alan için gereken özellikleri ayarlar. Ben Bu yapılabilir da adı TableC_records
tarafından TableB_DTO en özelliğinde TableC uygun tüm kayıtları isim TableB_records tarafından ve ayrıca TableB_DTO içinde TableA mülkiyet alanındaki TABLEB tüm eşleşen kayıtları doldurmak istiyor? Neyi değiştirmem gerekiyor? Yani ben bir fabrika yöntemini yapacak
Eğer Varlık Framework Poco en (bazen kazaen Kod İlk olarak adlandırılan aka DBContext,) kullanamazsınız bir neden var mı? Temel olarak, DTO'lara olan ihtiyacı ortadan kaldırabilir ve bunun yerine EF POCO'ları kullanabilir misiniz? – JMarsch
AutoMapper'ı kullanmayı düşündünüz mü? DTO'larınızın ne kadar farklı olduğuna bağlı olarak, bu, eşlemeyi yapmak için iki veya üç kod satırı kadar basit olabilir. – Robaticus
@jMarsch: Veritabanı zaten orada edmx yolu gitti – user20358