我很难利用 Fluent NHibernate 的 HasOne 映射。基本上,A 类在 B 类中可以有匹配的(只有一条或没有)记录。
请帮助定义关系的 AMap 和 BMap 类。
谢谢。
public class A
{
public virtual int Id {get;set;}
public virtual string P1 {get;set;}
public virtual string P2 {get;set;}
public virtual string P3 {get;set;}
}
public class B
{
public virtual int Id {get;set;}
public virtual string P4 {get;set;}
public virtual string P5 {get;set;}
public virtual string P6 {get;set;}
}
To get one-to-one
映射工作时您需要添加类型的属性B
去上课A
反之亦然,根据下面的代码。由于 NHibernate 不支持单向一对一,因此这两个类都需要这些引用。
public class A
{
public virtual int Id {get;set;}
public virtual string P1 {get;set;}
public virtual string P2 {get;set;}
public virtual string P3 {get;set;}
public virtual B child { get; set; }
}
public class B
{
public virtual int Id {get;set;}
public virtual string P4 {get;set;}
public virtual string P5 {get;set;}
public virtual string P6 {get;set;}
public virtual A parent;
}
然后在流畅的映射中,您需要添加以下内容
public AMap()
{
/* mapping for id and properties here */
HasOne(x => x.child)
.Cascade.All();
}
public BMap()
{
/* mapping for id and properties here */
References(x => x.parent)
.Unique();
}
请注意,一对多映射BMap
被标记为Unique
。如果您使用 NHibernate 生成数据库模式,这将用于创建唯一列约束。
要创建新记录,您可以编写如下内容:
using (var transaction = session.BeginTransaction())
{
var classA = new A();
classA.child = new B() { parent = classA};
session.Save(owner);
transaction.Commit();
}
最后需要注意的是,当前版本的 NHibernate 3.4 不支持孤立一对一的级联删除。看here https://nhibernate.jira.com/browse/NH-1262用于错误报告。这意味着如果你写类似的东西session.Delete(classA);
那么关联的B类记录不会被自动删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)