سؤال

أحاول العمل من خلال مشكلة حيث أقوم بتخطيط كيانات 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
                              }
            };
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top