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

この場合、私は2つのプロパティのアプローチを使用しており、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 に答える