1

我有这段代码用于将我的对象保存到数据库中,它工作正常。

    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; }

}

例如,实体模型(在汽车中)已经包含在数据库中,为了保存订单应该只是模型 ID 就足够了,但现在它从客户端向服务器发送所有实体汽车和具有所有属性的模型。如果我只发送实体 ID(我的意思是已经在数据库中并拥有私钥的那个实体),我怎么能保存订单?

4

1 回答 1

1

在这种情况下,我使用两个属性的方法,column以不同的方式表示一个:ReferenceReferenceId

所以让我们先扩展 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; }
}

所以,现在我们可以直接

  1. 设置ModelId
  2. 设置对Model实例的引用

在这两种情况下ModelId都有正确的价值。

和 NHibernate 映射

<many-to-one name="Model" column="ModelId" insert="false" update="false"   />
<property  name="ModelId" column="ModelId/>

好吧,唯一持久的属性是ModelId. 但是,参考Model完全适用于过滤、导航......而且您只能发送Car带有 int 属性的实例......

于 2013-01-21T19:20:25.347 回答