رسم خرائط EFV1 1 للعديد من العلاقة مع POCOS
-
26-09-2019 - |
سؤال
أحاول العمل من خلال مشكلة حيث أقوم بتخطيط كيانات EF إلى Poco التي تعمل كـ DTO.
لدي جدولين داخل قاعدة البيانات الخاصة بي ، على سبيل المثال المنتجات والفئات. ينتمي المنتج إلى فئة واحدة وقد يحتوي فئة واحدة على العديد من المنتجات. تُدعى كيانات EF الخاصة بي efproduct و efcategory. داخل كل كيان ، توجد خاصية التنقل المناسبة بين EFProduct و EFCategory.
كائنات poco الخاصة بي بسيطة
public class Product
{
public string Name { get; set; }
public int ID { get; set; }
public double Price { get; set; }
public Category ProductType { get; set; }
}
public class Category
{
public int ID { get; set; }
public string Name { get; set; }
public List<Product> products { get; set; }
}
للحصول على قائمة بالمنتجات ، يمكنني القيام بشيء مثل
public IQueryable<Product> GetProducts()
{
return from p in ctx.Products
select new Product
{
ID = p.ID,
Name = p.Name,
Price = p.Price
ProductType = p.Category
};
}
ومع ذلك ، هناك خطأ غير متطابق لأن P.Category من النوع efcategory. كيف يمكنني حل هذا؟ هذا هو ، كيف يمكنني تحويل P.Category إلى كتابة الفئة؟
وبالمثل عندما أفعل
return from c in ctx.Categories
where c.ID == id
select new Category
{
ID = c.ID,
Name = c.Name,
ProductList = c.Products;
};
أحصل على عدم تطابق لأن قائمة المنتجات من نوع المنتج ، حيث C.Products عبارة
أعلم في .NET EF قد أضافت دعمًا لـ POCO ، لكنني أجبرت على استخدام .NET 3.5 SP1.
المحلول
return from p in ctx.Products
select new Product
{
ID = p.ID,
Name = p.Name,
Price = p.Price
ProductType = new Category
{
ID = p.Category.ID,
Name = p.Category.Name // etc.
}
};
ل Category
أنت تفعل:
return from c in ctx.Categories
where c.ID == id
select new Category
{
ID = c.ID,
Name = c.Name,
ProductList = from p in c.Products
select new Product
{
ID = p.ID,
Name = p.Name,
Price = p.Price
}
};