2015-04-21 3 views
0

Здесь дело давало мне покоя, У меня есть 2 сущностей --- 'Мастер' и 'ведомых', позвольте мне перечислить их первый:Entity Framework Fluent конфигурации API

public class Master 
{ 
    public Guid Id {get;set;} 
    public virtual ICollection<Slave> Slaves { get; set; } 
    public virtual Slave ParentSlave { get; set; } 
} 

class Slave 
{ 
    public Guid Id { get; set; } 
    public Guid ParentMasterId { get; set; } 
    public Master ParentMaster { get; set; } 
    public Guid? ChildMasterId { get; set; } 
    public Master ChildMaster { get; set; } 
} 

В основном,

  1. Мастер имеет список Slaves;
  2. Раб должен принадлежать Учителю (Родитель);
  3. У раба есть еще один Учитель (Ребенок), который затем может иметь список рабов;

Здесь приходит соответствующие данные классов отображений,

class MasterDataMap : EntityTypeConfiguration<Master> 
{ 
    public MasterDataMap() 
    { 
     HasKey(i => i.Id); 
     HasOptional(o => o.ParentSlave).WithRequired(o=>o.ChildMaster); 
     ToTable("Master"); 
    } 
} 

class SlaveDataMap : EntityTypeConfiguration<Slave> 
{ 
    public SlaveDataMap() 
    { 
     HasKey(i => i.Id); 
     HasRequired(o => o.ParentMaster).WithMany(m => m.Slaves).HasForeignKey(k=>k.ParentMasterId).WillCascadeOnDelete(true); 
     HasRequired(o => o.ChildMaster).WithOptional(d => d.ParentSlave); 
     ToTable("Slave"); 
    } 
} 

Тех 2 лиц могут пройти проверку EF модели без каких-либо проблем, и таблицы могут быть успешно созданы во время испытания конца в конец, после выполнения следующих код,

for (var idx = x; idx <= xx; idx++) 
{ 
    topMaster.Slaves.Add(new Slave 
         { 
          Id = Guid.NewGuid(), 
          ChildMaster = new Master 
              { 
               Id = Guid.NewGuid(), 
              } 
         }); 
} 

ТопМастер и его ведомые были вставлены в таблицы, childmaster (ы) также был вставлен, но они не связаны с ТопМастер рабами, что означает «childMaster» являются NUL l и «ChildMasterId» являются пустыми.

Я не знаю, что не так с классами сопоставления данных, чтобы вызвать эту проблему.

ответ

0

/*

В случае текучего отображения Entity один к одному с обеими боковой навигацией, вы не можете иметь пользовательский внешний ключ имени явно. По крайней мере, я не знаю, как это сделать до версии EF 5.0. Я знаю, что мы можем легко сделать это, используя способ атрибута.

*/

public class Master 
    { 
     public Guid Id {get;set;} 
     public virtual ICollection<Slave> Slaves { get; set; } 
     public virtual Slave ParentSlave { get; set; } 
    } 

class Slave 
{ 
    public Guid Id { get; set; } 
    public Guid ParentMasterId { get; set; } 
    public Master ParentMaster { get; set; } 
    public Master ChildMaster { get; set; } 
} 

class MasterDataMap : EntityTypeConfiguration<Master> 
{ 
    public MasterDataMap() 
    { 
     HasKey(i => i.Id); 
     //HasOptional(o => o.ParentSlave).WithRequired(o=>o.ChildMaster); 
     ToTable("Master"); 
    } 
} 

class SlaveDataMap : EntityTypeConfiguration<Slave> 
{ 
    public SlaveDataMap() 
    { 
     HasKey(i => i.Id); 
     HasRequired(o => o.ParentMaster).WithMany(m => m.Slaves).HasForeignKey(k=>k.ParentMasterId).WillCascadeOnDelete(true); 
     HasRequired(o => o.ChildMaster).WithOptional(d => d.ParentSlave); 
     ToTable("Slave"); 
    } 
+0

Позвольте мне пояснить это немного. Это EF 6.x, так что это можно сделать. Исходный код может быть скомпилирован без каких-либо проблем. Он также может работать от начала до конца. Он также прошел проверку модели данных EF. Единственная проблема заключается в том, что связь между «ChildMaster» и «Slave» не может быть установлена. – wxdtony

+0

Вы попробовали вышеуказанный код. – pjobs

+0

Я стараюсь не применять атрибуты к моему POCO, но я попробую, если не найду другого решения. – wxdtony

0

Хорошо, ребята, я выясняю решение. Это моя вина, я забыл добавить «виртуальный» перед «ParentMaster» и «ChildMaster».

Поскольку поведение ассоциации «относится к EntityObject и POCOs, которые создают dyanmic-прокси». --- Юля Лерман [Структура сущности программирования, глава 19].

Смежные вопросы