В предыдущих попытках со старыми версиями Entity Framework я привык использовать Eager Loading - так что вы получаете свой корневой объект и затем собираете связанные объекты, как требуется, с помощью «Include».Entity Framework загружает избыточные данные
В моем текущем проекте мы внедрили последнюю версию EF в новую базу данных, используя сначала базу данных. Возьмите этот класс, например:
public partial class Zone
{
public Zone()
{
this.OverrideCharges = new HashSet<OverrideCharge>();
}
public System.Guid RowId { get; set; }
public string Name { get; set; }
public virtual ICollection<OverrideCharge> OverrideCharges { get; set; }
}
В OverrideCharges объект также имеет ряд подсвойств под ним, со смежными организациями, находящимися под них.
У нас есть два контекста: фактический контекст БД и набор контекстов DTO. Объекты для последних в основном являются копиями первого - объект Zone_dto является в значительной степени клоном оригинала. В обеих случаях, я выключил отложенную загрузку с помощью:
public CContext(): base("BreezeMetaData")
{
this.Configuration.LazyLoadingEnabled = false;
}
public UDBEntities()
: base("name=UDBEntities")
{
this.Configuration.LazyLoadingEnabled = false;
}
Теперь я запрашиваю мои объекты пояса, делая это:
public List<Zone_dto> GetZones()
{
List<Zone> zones = _cilContext.Zones.ToList();
List<Zone_dto> zone_dtos = new List<Zone_dto>();
foreach (Zone zn in zones)
{
zone_dtos.Add(Mapper.Map<Zone, Zone_dto>(zn));
}
return zone_dtos;
}
Так что - не включает. И Lazy Loading отключен. Я ожидал бы вернуть список объектов Zone и их прямых свойств, но не связанные с ними объекты.
Но я вернусь к объектам Zone, а также всем их OverrideCharges, а также всем связанным объектам с этими OverrideCharges и т. Д., Вплоть до дерева.
Эти объекты данных не огромны, и это не является серьезной проблемой. Но я расстроен тем, что не понимаю, почему я возвращаю все эти данные, о которых я не просил. Может кто-нибудь объяснить?
Вы отключите LazyLoading для всего жизненного цикла контекста или просто для этой операции? Ваш контекст мог бы потенциально загрузить данные перед этой операцией, и, создав этот список, вы все увидите (так как загрузка была сделана до того, как вы отключили ленивую загрузку). – Chris
Это отключено в конструкторе - см. Edit –