0

假設我只有兩個類:組和用戶。用戶擁有羣組並且羣組擁有成員(用戶實例)使用NHibernate不會更新多個屬性

public class User { 
    public virtual int id { set; get; } 
    public virtual string username { set; get; } 
    public virtual IList<Group> groups { set; get; }  
    public User() 
    {  
     groups = new List<Group>(); 
    } 
    public virtual void joinGroup(Group group) 
    { 
     if (this.groups.Contains(group)) 
      throw new AlreadyJoinedException(); 
     group.members.Add(this); 
     this.groups.Add(group); 
    } 

public class Group 
{ 

    public virtual int id { set; get; } 
    public virtual string name { set; get; } 
    public virtual User administrator { set; get; } 
    public virtual IList<User> members { set; get; } 
    public Group() 
    { 
     members = new List<User>(); 
    } 

正如您所見,域名非常簡單。我已經正確使用功能NHibernate,

public class UserMapping : ClassMap<User> 
{ 
    public UserMapping() 
    { 
     this.Id(user => user.id).GeneratedBy.Identity(); 
     this.Map(user => user.username).Not.Nullable().Length(50).Not.LazyLoad(); 
     this.HasManyToMany(user => user.groups).Table("MemberPerGroup").ParentKeyColumn("id_user").ChildKeyColumn("id_group").Not.LazyLoad();   
    } 
} 

    public class GroupMapping : ClassMap<Group> 
{ 
    public GroupMapping() 
    { 
     this.Id(group => group.id).GeneratedBy.Identity(); 
     this.Map(group => group.name).Not.Nullable().Length(50).Not.LazyLoad(); 
     this.References(group => group.administrator).Not.Nullable().Not.LazyLoad(); 
     this.HasManyToMany(group => group.members).Table("MemberPerGroup").ParentKeyColumn("id_group").ChildKeyColumn("id_user").Not.LazyLoad(); 
    } 
} 

我預設電臺使用ASP MVC 4 Web應用程序我的問題顯示出來,當用戶試圖加入組已經映射兩類。它不會中斷,但它不能正常工作(不會在MemberPerGroup中將新行插入表中)。我正在做類似的事情:

 public void JoinGroup(User user,Group group){ 
     this.userRepository.GetSessionFactory().TransactionalInterceptor(() => 
     { 
      user.joinGroup(group); 
     }); 
    } 

在此先感謝。

Ivan。

回答

0

看來你的映射沒有級聯集?
this.HasManyToMany(group => group.members)
.Table("MemberPerGroup")
.ParentKeyColumn("id_group")
.ChildKeyColumn("id_user")
.Not.LazyLoad()
.Cascade.SaveUpdate();

我很好奇 - 爲什麼使用GetSessionFactory()?我們的倉庫拿在構造一個ISession對象,(由autofac注入,但是這無關緊要),從中我們開始疑問:

// even better to use a transaction, but this is just a sample
_session.SaveOrUpdate(user);
_session.Flush();