1
我很新的NHibernate。通過代碼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?
乾杯,
詹姆斯
向我們展示用於保存和讀取關係以及會話/事務邊界的完整代碼。 – NOtherDev 2012-03-23 17:19:23