Entity framework 4.1 с навигацией по многим причинам, как предотвратить циклическую загрузку связанных объектов?Entity framework 4.1 с одним-многим навигационным способом, как предотвратить циклическую загрузку связанных объектов?
Ex: Две таблицы имеют один ко многим отношению
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>
}
В выше отл. Альбомы включали Genre.So Album, есть жанр, а затем жанр имеет список альбомов, и он продолжается. Будут увеличены размеры dbcontext или снизятся производительность. Это неправильный способ справиться с загрузкой связанных свойств навигации?
Спасибо @ wayne.blackmon! Если нам нужно отключить ленивую загрузку для этого в DbContext как «Configuration.LazyLoadingEnabled = false;», а также нам нужно удалить Virtual из свойств, показанных выше? – SNJ
Вы должны пометить все свойства ассоциации как виртуальные. Я не думаю, что ленивая загрузка - это проблема. Мне нужно будет увидеть ваш код linq, чтобы узнать, в чем проблема. Я предпочитаю не перемещать свойства ассоциации в коде LINQ. Каждый раз, когда вы нажмете один, он будет заполняться. Попробуйте использовать идентификатор записи или другие критерии в вашем лямбда-выражении, как показано выше. –
В приведенном выше примере. Альбомы включали Genre.So Album, есть жанр, а затем жанр имеет список альбомов, и он продолжается. Будут увеличены размеры dbcontext или снизятся производительность. Это неправильный способ справиться с загрузкой связанных свойств навигации? – SNJ