首页新闻招聘找找看知识库
  • 回复:1 浏览:516 2014-09-04 11:10 来自 超期服役

     情况如下  有 User 表 ,跟 Group 表,manytomany 关系

    User 表配置:

            /// 
                   /// 所属用户组
            /// 
                  [Bag(0, Cascade = "All", Table = "org_GorupUserRelation", Lazy = CollectionLazy.False, Inverse = false)]
            [Key(1, Column = "UserId")]
            [ManyToMany(2, Column = "GroupId", ClassType = typeof(GroupInfo))]
            public virtual IList UserGroups
            {
                get { return _lstUserGroup ?? (_lstUserGroup = new List()); }
                set
                {
                    _lstUserGroup = value;
                }
            }

     

    Group 表配置:

           /// 
            /// 用户列表
         /// 
            [Bag(0, Cascade = "None", Table = "org_GorupUserRelation", Lazy = CollectionLazy.True, Inverse = false)]
            [Key(1, Column = "GroupId")]
            [ManyToMany(2, Column = "UserId", ClassType = typeof(UserInfo))]
            public virtual IList Users
            {
                get
                {
                    return _lstUser ?? (_lstUser = new List()); 
                }
                set
                {
                    _lstUser = value;
                }
            }

     测试代码:

    [TestMethod]
            public void GetUsersInGroupTest()
            {
                var target = new UserBusiness();
                var groupBs = new GroupBusiness();
                var groupCreateInfo = new GroupInfo
                {
                    Id = MyStringHelper.GetGuid(),
                    Code = "sfeef",
                    Remark = "测试",
                    Name = "测试分组",
                    RecordType = EnumRecordType.用户创建数据,

                };

                groupCreateInfo.Users.Add(_userInfo);
                var group = groupBs.Create(string.Empty, groupCreateInfo);           
                
    // 这里面是获取 Group 实体对象 返回 group.Users 列表
                var actual = target.GetUsersInGroup(group.Id, new PageContext());
    // 在这里数量是准确的,没有问题
                Assert.IsTrue(actual.Count == 1);

    var user = target.GetUserById(_userInfo.Id);
       // 在这里 user.UserGroups.Count == 0 是什么原因?缓存吗?如何处理
       // 数据库里我看了,关联表里数据插入成功
                Assert.IsTrue(user.UserGroups.Count > 0);

                groupBs.PhysicsDeleteById(string.Empty,group.Id);
            }

     

  • 超期服役
    2014-09-09 14:21 超期服役
    可以确定是一级缓存造成的,在更新语句后添加 Session.Clear();
    一切正常,但是有一点不明白,我在更新一个对象时,为什么NHibernate不能智能地跟新缓存里与它关联的对象。通过配置可以实现吗?期待高手解答!
    第1楼 回到顶楼
登录后才能评论,请先登录注册