Исправить свободный интерфейс API для отношений один-к-одному в Entity Framework?
На основе следующих моделей:
public class Parent
{
public int Id {get; set;}
public virtual Child Child {get; set;}
}
public class Child
{
public int Id {get; set;}
public int ParentId {get; set;}
public virtual Parent Parent {get; set;}
}
Я настроил отображение для классов следующим образом:
public class ParentMap : EntityTypeConfiguration<Parent>
{
public ParentMap()
{
this.ToTable("parents");
this.HasKey(t => t.Id).Property(t => t.Id).HasColumnName("id")
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
this.HasOptional(t => t.Child)
.WithRequired(t => t.Parent)
.WillCascadeOnDelete();
}
}
public class ChildMap : EntityTypeConfiguration<Child>
{
public ChildMap()
{
this.ToTable("children");
this.HasKey(t => t.Id).Property(t => t.Id).HasColumnName("id")
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
this.Property(t => t.ParentId).HasColumnName("id_parent");
}
}
Свойства навигации выше отмечены virtual
Однако отложенная загрузка отключается, выполняя следующие действия:
public Abo5Context()
: base("Name=mydbcontext")
{
this.Configuration.LazyLoadingEnabled = false;
}
Parent
может иметь 0 или 1 Child
и Child
может иметь 0 или 1 Parent
,
Я использую готовую загрузку, чтобы загрузить полный граф сущности для Parent
, Тем не менее, с учетом вышеизложенного, Child
не загружается. Я следую шаблонам UoW и Repository и загрузке Parent
Совокупность делается следующим образом:
public Parent Get(int id, params Expression<Func<Parent, object>>[] include)
{
var set = include.Aggregate<Expression<Func<Parent, object>>, IQueryable<Parent>>
(dbSet, (current, expression) => current.Include(expression));
return set.SingleOrDefault<Parent>(x => x.Id == id);
}
Разве это не правильный путь для конфигурации отношений 1..0-1?