1対多のナビゲーションを備えたエンティティフレームワーク4.1関連エンティティの循環ロードを防ぐ方法?
例: 2 つのテーブルには 1 対多の関係があります
event
とdiscount
それぞれevent
に複数discount
の を含めることができます。
ディスカウント エンティティ オブジェクトを作成すると、イベントのオブジェクトが遅延読み込みで取得されます。イベント オブジェクトを使用して、関連する割引のコレクションを取得し、サイクルを続けます。
この種のロードでデータが大きい場合、パフォーマンスが低下すると確信しています。
Entityフレームワークでそのような状況を処理する方法。
public Event()
{
public virtual ICollection<discount> discounts{ get; set; }
}
public Discount
{
public virtual Event Event {get;set;}
}
別の例:
[Bind(Exclude = "AlbumId")]
public class Album
{
[ScaffoldColumn(false)]
public int AlbumId { get; set; }
[DisplayName("Genre")]
public int GenreId { get; set; }
public virtual Genre Genre { get; set; }
}
public partial class Genre
{
public int GenreId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public List<Album> Albums { get; set; }
}
public ViewResult Index()
{
var albums = db.Albums.Include(a => a.Genre).Include(a => a.Artist);
return View(albums.ToList());
}
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Genre.Name)
</td>
<td>
@Truncate(item.Artist.Name, 25)
</td>
<td>
@Truncate(item.Title, 25)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.AlbumId }) |
@Html.ActionLink("Details", "Details", new { id=item.AlbumId }) |
@Html.ActionLink("Delete", "Delete", new { id=item.AlbumId })
</td>
</tr>
}
上記の例で。アルバムにはジャンルが含まれています。したがって、アルバムにはジャンルがあり、ジャンルにはアルバム リストがあり、それが続きます。dbcontext のサイズが大きくなったり、パフォーマンスが低下したりします。これは、関連するナビゲーション プロパティの読み込みを処理する間違った方法ですか?