NH一对一(双向主键关联映射)
概述:
Nhibernate 表之间的几种关系不易把握,现根据个人学习,进行总结.NH一对一有三种设置方式,分别为:
单向主键关联映射
双向主键关联映射
唯一外键关联映射
本文以双向主键关联映射作为学习
a.实体:
public class Parent
{
public Parent()
{
Child = new Child();
}
public virtual Guid Id
{
get;
set;
}
public virtual Child Child
{
get;
set;
}
}
public class Child
{
public Child()
{
}
public virtual Guid Id
{
get;
set;
}
public virtual Parent Parent
{
get;
set;
}
}
b.映射:
<class name="Parent">
<id name="Id">
<generator class="guid" />
</id>
<one-to-one name ="Child" class ="Child" cascade="all" constrained="true">
</one-to-one>
</class>
<class name="Child">
<id name="Id">
<generator class="guid" />
</id>
<one-to-one name ="Parent" class=" Parent "/>
</class>
c.测试代码:
[Test]
public void CreateInitialDataOnetoOne()
{
using (ISession session = _sessionFactory.OpenSession())
using (ITransaction transaction = session.BeginTransaction())
{
Parent p = new Parent();
Child c = new Child();
c.Parent = p;
p.Child = c;
session.Save(p);
transaction.Commit();
}
}
public void Selec Child Test()
{
using (ISession session = _sessionFactory.OpenSession())
using (ITransaction transaction = session.BeginTransaction())
{
var Child = session.Get< Child >(1);
Console.WriteLine("Child姓名为:{0}", Child.Name);
Console.WriteLine("Parent姓名为:{0}", Child. Parent.Name);
}
}
d.总结:
取Child时,将会取出Parent.这是因为“一对一”主键关联映射默认的抓取(fetch)策略是“join