【问题标题】:Doesn't update many to many attribute using NHibernate不使用 NHibernate 更新多对多属性
【发布时间】:2013-07-24 23:26:54
【问题描述】:

假设我只有两个类:Group 和 User。用户有组,组有成员(用户实例)

 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>();
    }

正如您所看到的域,它非常简单。我已经使用 Fluent 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);
        }); 
    }

提前致谢。

伊万。

【问题讨论】:

    标签: asp.net-mvc-4 fluent-nhibernate fluent-nhibernate-mapping


    【解决方案1】:

    您的映射似乎没有级联集?
    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();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多