我有这个代码将我的对象保存到数据库,它工作正常。
public int CreateOrder(OrderDB orderDB)
{
using (ISession session = sessionFactory.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
try
{
session.SaveOrUpdate(orderDB.Car);
session.SaveOrUpdate(orderDB.Owner);
for (int i = 0; i < orderDB.Service.Count; i++)
{
session.SaveOrUpdate(orderDB.Service[i]);
}
session.SaveOrUpdate(orderDB);
transaction.Commit();
}
catch (Exception e)
{
throw;
}
}
}
return orderDB.ID;
}
实体:
public class OrderDB:BasicRecordDB
{
public virtual int ID { get; set; }
public virtual IList<Service> Service { get; set; }
public virtual Owner Owner { get; set; }
public virtual Car Car { get; set; }
public virtual Box Box { get; set; }
public virtual double TotalPrise { get; set; }
public virtual int OrderNumber { get; set; }
}
public class Car
{
public virtual int ID { get; set; }
public virtual string CarNumber { get; set; }
public virtual Model Model { get; set; }
}
例如实体模型(在Car中)已经包含在数据库中并且用于保存Order应该足够只是Model ID但是现在它从Client发送到所有实体Car和具有所有属性的模型。如果我只发送实体ID(我的意思是那个已经在数据库中并且有私钥的实体),我可以保存订单吗?
答案 0 :(得分:1)
在这种情况下,我使用两种属性的方法,以不同的方式表示一个column
:参考和 ReferenceId 。
所以让我们首先扩展Car类:
public class Car
{
...
Model _model
public virtual Model Model
{
get { return _model; }
set
{
_model = value;
ModelId = _model.ID;
}
}
public virtual int ModelId { get; set; }
}
所以,现在我们可以直接
ModelId
或Model
instance 在两种情况下ModelId
都有正确的值。
和NHibernate映射
<many-to-one name="Model" column="ModelId" insert="false" update="false" />
<property name="ModelId" column="ModelId/>
嗯,唯一持久的属性是ModelId
。但是,引用Model
完全适用于过滤,导航...而且您只能使用int属性发送Car
实例...