У меня проблема с загрузкой EF 5 и Lazy циклическими ссылками.Entity Framework 5 Cyclic Lazy Загрузка Причина OutOfMemoryException
Нижеследующее изображение представляет мою модель.
Основная проблема заключается в классе Model и ModelProperties, поскольку Model содержит свойство навигации IEnumerable, а ModelProperty содержит свойство навигации модели.
Так эта конструкция вызывает ситуацию ниже
Вы можете получить доступ к полноразмерному изображению http://tinypic.com/r/2vskuxl/6
Как вы можете себе представить эту причину очень большая проблема, OutOfMemory исключения.
Только решение, которое я могу найти, отключает ленивую загрузку и использует другие методы. Но ленивая загрузка очень упрощает нашу работу. Надеюсь, что есть конфигурация или атрибут, который поможет мне загружать только два уровня отношений с ленивой загрузкой.
Есть ли способ достичь этого?
ОБНОВЛЕНИЕ: Относительно запроса от Джули Лерман, здесь представлена визуальная модель EF. Я выделил основное отношение, которое вызывает проблему. Также вы можете получить доступ к полноразмерному на http://tinypic.com/r/30v15pg/6
UPDATE 2: Вот определение модели.
public class Model {
public int ModelID { get; set; }
public int BrandID {
get;
set;
}
public virtual Brand Brand { get; set; }
public string Logo { get; set; }
public string Name { get; set; }
public virtual ICollection<ModelProperty> ModelProperties {
get;
set;
}
}
public class ModelProperty {
public int ModelPropertyID {
get;
set;
}
public virtual int PropertyDefinitionID {
get;
set;
}
public virtual PropertyDefinition PropertyDefinition {
get;
set;
}
public virtual int ModelID {
get;
set;
}
public virtual Model Model {
get;
set;
}
public bool IsContainable {
get;
set;
}
public bool HasFilterDefinition {
get;
set;
}
public virtual ICollection<ModelPropertyValue> ModelPropertyValues {
get;
set;
}
public virtual ICollection<ModelPropertyMatchingFilter> ModelPropertyMatchingFilter {
get;
set;
}
}
Также существует конфигурация объекта для ModelProperty.
public class ModelPropertyEntityTypeConfiguration : EntityTypeConfiguration<ModelProperty> {
public ModelPropertyEntityTypeConfiguration() {
HasKey(p => p.ModelPropertyID);
HasRequired(p => p.PropertyDefinition).WithMany(s => s.ModelProperties).HasForeignKey(s => s.PropertyDefinitionID).WillCascadeOnDelete(false);
HasRequired(p => p.Model).WithMany(s => s.ModelProperties).HasForeignKey(s => s.ModelID).WillCascadeOnDelete(false);
HasMany(p => p.ModelPropertyValues).WithRequired(s => s.ModelProperty).HasForeignKey(s => s.ModelPropertyID).WillCascadeOnDelete(true);
HasMany(p => p.ModelPropertyMatchingFilter).WithRequired(s => s.ContainerModelProperty).HasForeignKey(s => s.ContainerModelPropertyID).WillCascadeOnDelete(false);
ToTable("dbo.ModelProperties");
}
}
UPDATE 3: Я не уверен, но Automapper может вызвать это также. Поскольку Entity Framework Profile сообщает тысячам методов Autommaper, вызываемых во время работы.
UPDATE 4: Вот ЭфПроф StackTrace: Доступ большая версия http://tinypic.com/r/21cazv4/6
UPDATE 5 Вы можете увидеть образец проекта здесь: https://github.com/bahadirarslan/AutomapperCircularReference В образце, вы можете увидеть легко бесконечны петли через Quick watch.
Bahadir, я предполагаю, что вы используете код сначала, поэтому не имеете EDMX для просмотра. Можете ли вы использовать инструмент EF Power Tool для создания визуального представления вашей модели и поделиться ею здесь? Если вы не знаете, как использовать этот инструмент, я показываю его примерно в 19:00 в этом видео: http://channel9.msdn.com/Shows/Visual-Studio-Toolbox/Entity-Framework-Tips-and- Tricks # time = 19m00s –
Можете ли вы показать фрагмент кода, который вызывает «OutOfMemoryException»? В quickview вы можете развернуть вечно, но тогда вы запускаете ленивую загрузку самостоятельно. Какой код или процесс в вашем приложении вызывает проблемы? –
@JulieLerman Я добавил визуальную модель EF. Надеюсь, это поможет. –