具有一对多导航的实体框架4.1如何防止相关实体的循环加载?
例如:两个表具有一对多关系
event
和discount
每个event
可以有多个discount
s。
当我创建折扣实体对象时,我会通过延迟加载获得事件对象。使用事件对象,我可以收集相关折扣并继续循环。
我相信如果这种加载的数据很大,性能会降低。
如何在实体框架中处理这种情况。
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 的大小还是会降低性能。这是处理加载相关导航属性的错误方法吗?