Dra*_*ski 3 c# nhibernate one-to-one fluent-nhibernate
我很难用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;}
}
Run Code Online (Sandbox Code Playgroud)
要使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;
}
Run Code Online (Sandbox Code Playgroud)
然后在流畅的映射中,您需要添加以下内容
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();
}
Run Code Online (Sandbox Code Playgroud)
请注意,一对多映射BMap标记为Unique.如果使用NHibernate生成数据库模式,则用于创建唯一列约束.
要创建新记录,您可以编写如下内容:
using (var transaction = session.BeginTransaction())
{
var classA = new A();
classA.child = new B() { parent = classA};
session.Save(owner);
transaction.Commit();
}
Run Code Online (Sandbox Code Playgroud)
最后一点需要注意,当前版本的NHibernate 3.4不支持逐级删除孤立的一对一.请参阅此处获取错误报告.这意味着如果您编写类似的内容,session.Delete(classA);则不会自动删除关联的B类记录.
| 归档时间: |
|
| 查看次数: |
10398 次 |
| 最近记录: |