1

我对 NHibernate 很陌生。

我有很多映射。它们看起来像这样:

public abstract class EntityMapping<T> : ClassMapping<T> where T : Entity
{
    public EntityMapping()
    {
        Id(x => x.Id, map => map.Generator(new IdentityGeneratorDef()));
    }
}

    public class PersonMapping : EntityMapping<Person>
    {
        public PersonMapping()
        {
            Property(x => x.Name);
        }
    }

     public class ParentMapping : JoinedSubclassMapping<Parent>
        {
            public ParentMapping()
            {
                Property(x => x.ParentOf);
                Key(x => x.Column("ParentId"));

                Bag(x => x.Children, map =>
                                         {
                                             map.Cascade(Cascade.All);
                                             map.Table("ParentChildren");
                                             map.Key(x => x.Column("ParentId"));
                                         },
                                         r => r.ManyToMany(rm => rm.Column("ChildId")));
            }
        }

        public class ChildMapping : JoinedSubclassMapping<Child>
        {
            public ChildMapping()
            {
                Property(x => x.Toys);
                Key(x => x.Column("ChildId"));

                Bag(x => x.Parents, map =>
                {
                    map.Cascade(Cascade.All);
                    map.Table("ParentChildren");
                    map.Inverse(true);
                    map.Key(x => x.Column("ChildId"));
                },
                r=>r.ManyToMany(rm => rm.Column("ParentId")));
            }
        }

当我做

var parent = session.Get<Parent>(1);
parent.Children.First(); // Works

我可以访问已添加的孩子。但是,当我尝试按原路导航时,即:

var child = session.Get<Child>(2);
child.Parents.First(); // Doesn't work.

子对象上的父集合为空。

有没有人能够阐明这个问题?

干杯,

詹姆士

编辑

抱歉,我使用以下代码来保存和获取我的实体:

using(var session = _sessionFactory.OpenSession())
{
   using(var transaction = session.BeginTransaction())
   {
      var person = new Parent(){Name = "James", ParentOf = 1};
      var child = new Child(){ Name="James Jr." Toys = 20 };

      person.Children.Add(child);

      session.Save(person);
      transaction.Commit();
   }
}

要检索数据:

using(var session = _sessionFactory.OpenSession())
{
   using(var transaction = session.BeginTransaction())
   {
      var james = session.Get<Parent>(1);
      var child = session.Get<Child>(2);        

      transaction.Commit();
   }
}

我是否需要将 get 包装在事务中?

干杯,

詹姆士

4

1 回答 1

0

对不起,我是个白痴,

我刚刚再次编写了相同的代码,并注意到我在与提交相同的事务中获得了获取(在 session.save 之后和 transaction.commit 之前)

谢谢你的帮助!

于 2012-03-26T12:03:57.163 回答