1

ASP.NET Web Api を使用して小さなサービスを構築しました。私のドメインクラスは次のようになります。

 public class Drink : IEntity
{
    public Drink()
    {
        Ingridients = new List<Ingredient>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Ingredient> Ingridients { get; set; }
    public string Approach { get; set; }
}

public class Ingredient : IEntity
{
    public Ingredient()
    {
        Drinks = new List<Drink>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Drink> Drinks { get; set; }
}

私のリポジトリは次のようになります。

public IEnumerable<T> GetAll(){return _dbSet;}

そして、私のコントローラーは次のようになります。

    public IEnumerable<Drink> GetAllDrinks()
    {
        return _unitOfWork.Drinks.GetAll();
    }

フィドラーを使用してリクエストすると、JSON の結果は次のようになります。

{"Id":15,"Name":"Russian Energy","Ingridients":[],"Approach":"Mix Vodka with Redbull"}

ご覧のとおり、Ingridents 配列は空です。何故ですか?

4

2 に答える 2

2

次の方法で熱心な読み込みを試すことができますInclude

メソッドを拡張GetAllして、熱心な読み込みを許可します。

//...
using System.Data.Entity;
//...

public IEnumerable<T> GetAll(params Expression<Func<T, object>>[] includes)
{
    IQueryable<T> query = _dbSet;
    if (includes != null)
    {
        foreach (var include in includes)
            query = query.Include(include);
    }
    return query;
}

次に、コントローラーで次のように使用します。

public IEnumerable<Drink> GetAllDrinks()
{
    return _unitOfWork.Drinks.GetAll(d => d.Ingredients);
}
于 2013-01-05T17:03:41.933 に答える
0

Entity Framework Code First を使用していますか?

その場合、ナビゲーション プロパティを次のようにマークする必要がありますvirtual

public class Drink : IEntity
{
    public Drink()
    {
        Ingridients = new List<Ingredient>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Ingredient> Ingridients { get; set; }
    public string Approach { get; set; }
}

public class Ingredient : IEntity
{
    public Ingredient()
    {
        Drinks = new List<Drink>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Drink> Drinks { get; set; }
}
于 2013-01-05T15:11:22.510 に答える