私のアプリケーションでは、構造は次のようになります。
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")
でしょうか?