2

DTOとして機能するPOCOにEFエンティティをマッピングしている問題を解決しようとしています。

データベース内に Products と Categories という 2 つのテーブルがあります。製品は 1 つのカテゴリに属し、1 つのカテゴリには多くの製品が含まれる場合があります。私の 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 を Category 型に変換できますか?

同様に私がするとき

        return from c in ctx.Categories
                where c.ID == id
                select new Category
                {
                    ID = c.ID,
                    Name = c.Name,
                    ProductList = c.Products;
                };

ProductList のタイプが Product であり、c.Products が EntityCollection であるため、不一致が発生します。

.NET EF で POCO のサポートが追加されたことは知っていますが、.NET 3.5 SP1 を使用せざるを得ません。

4

1 に答える 1

4
    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
                              }
            };
于 2010-06-10T12:56:41.290 に答える