关于(李永京)NHibernate一对多映射的关系中对象的添加

在学了了李永京组长的NHibernate 的教程后,有个地方弄不太明白。想请大家多多帮忙下。
比如当Order.cs类定义为以下内容后,
namespace DomainModel.Entities
{
public class Order
{
public virtual int OrderId { get; set; }
public virtual DateTime OrderDate { get; set; }
//多对一关系:Orders属于一个Customer
public virtual Customer Customer { get; set; }
}
}
现在要往数据库中插入一个Order对象。要如何插入呢?
上面的Customer是类对象类型。数据库中对应的Customer是int类型 。
然后添加对象的时候:
session.Save(new Order(){OrderDate=xx,Customer=??});
session.Flush();
当中的Customer应该怎么赋值呢?
晕,Order中的Customer只是个外键
一般不建议在类中设置双向关联的,不好控制
你可以去掉这个属性,在Customer类中AddOrder来增加Order。
或者Order.Customer=某个Customer对象
在配置的时候有个Inverse属性用来控制由父亲或儿子来维护级联关系,false的时候就是父亲(Customer)来维护,ture则是儿子(Order)。
如果是父亲的话:
customer.orders.add(new order(id="xx"));
session.Save(customer);
如果是儿子就是按照你写的那样,Customer应该是一个Customer对象,而不是int类型。
public virtual int OrderId { get; set; }
public virtual DateTime OrderDate { get; set; }
这两个就ok了,应该还有一个customerid,是int的
对象是方便你访问的时候用的,
老实说,我不精通 nh,但最近一直在用。这种关系我这边常接触到。一般我的处理流程是:
//第一步、必须确保外键(int, CustomerId/Customer.Id)存在,否则两种情况:要么数据库数据不完整,要么 nh 映射报错(找不到该 Customer)。
Customer existCustomer = new Customer() { ... };
existCustomer = (Customer)session.Insert(target);
session.flush();//?
//第二步,进行关联,保存当前目标实体
session.Insert(new Order(){OrderDate=xx,Customer= existCustomer });
session.Flush();//?