1

私のアプリケーションでは、構造は次のようになります。

public class Route
{
    [Key]
    public int RouteId {get; set;}
    public Address virtual AddressA {get; set;}
    public Address virtual AddressB {get; set;}
}

public class Address 
{
    [Key]
    public int AddressId {get; set;}
    public string Name {get; set;}
}

public class DbConnection : DbContext
{
    public DbSet<Route> Routes{get; set;}
    public DbSet<Address> Addresses{get; set;}
}

私はこのようなデータを取ります:

public ActionResult GetList()
{
    using(DbConnection db = new DbConnection)
    {
        var query = db.Routes.ToList();
    }

    return PartialView(query);
}

次に、データを表示します。

@foreach (var r in Model)
{
    <div>@r.AddressA.Name - @r.AddressB.Name</div>
}

ただし、問題は、ブラケットが閉じた後に View/PartialView がレンダリングされるusingため、AddressA の Name にアクセスしようとすると、テーブルが完全にロードされていないため、エラーが発生することです。はい、できます:

public ActionResult GetList()
{
    using(DbConnection db = new DbConnection)
    {
        var query = db.Routes.Include("Address").ToList();
    }

    return PartialView(query);
}

ただし、これをもう少し複雑なクエリにすると、コードはすべてのインクルードで非常に醜くなり始めます。これを克服する方法はありますか?1行の単純なコードまたはより醜いもの.Include("A").Include("B").Include("X.Y.Z")でしょうか?

4

1 に答える 1