2013-07-02 3 views
0

Я использую технику в nhibernate, где in, если я сохраняю объект родительского класса, связанные с ним объекты дочерних классов также сохранены. Если я удалю любой объект из коллекции, которую они также удалили из db.nhibernate lazy loading and recursive saving

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

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

У меня есть класс домена, похожий на тот, ниже

public class Class1 
{ 
    public virtual long Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual IList<Class2> Class2Seq { get; set; } 
} 
public class Class2 
{ 
    public virtual long Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual Class1 Class1Ref{ get; set; } 
} 

Классы картографирования подобны этим

public class Class1Map: ClassMap<Class1> 
{ 
    public Class1Map() 
    { 
     Id(x => x.Id).GeneratedBy.Increment(); 
     Map(x => x.Name); 
     HasMany(x => x.Class2Seq) 
      .KeyColumn("Class1Id") 
      .Not.LazyLoad() 
      .Inverse() 
      .Cascade.All(); 
    } 
} 

public class Class2Map: ClassMap<Class2> 
{ 
    public Class2Map() 
    { 
     Id(x => x.Id).GeneratedBy.Increment(); 
     Map(x => x.Name); 
     References(x => x.Class1Ref).Column("Class1Id").Not.LazyLoad(); 
    } 
} 

ответ

0

Если вы делаете что-то вроде

parent.Remove(child); 
session.SaveOrUpdate(parent); 
session.Flush() 

вашего отображения должно быть:

HasMany(x => x.Class2Seq) 
      .KeyColumn("Class1Id") 
      .Not.LazyLoad() 
      .Inverse() 
      .Cascade.AllDeleteOrphan(); 
+0

ОК. но DeleteOrphan требуется для remove() ... без сохранения saveorupdate(), не так ли? –

+0

Да, он должен, как и в parent.add (child) - до тех пор, пока вы установили child.parent –

+0

Да, я установил child.parent, и, как я уже говорил, он отлично работал, пока я не отключил ленивую загрузку. –