1

次のようにnhibernateで動作する2つのdbテーブルとクラス構造があります。

DB

ここに画像の説明を入力してください

C#pocoクラスは次のとおりです。

カスタマークラス

public class Customer
{
    public virtual int CustomerID { get; set; }
    public virtual string CustomerName { get; set; }
    public virtual string Title { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
    public virtual string Mobile { get; set; }
    public virtual string Phone { get; set; }
    public virtual string Email { get; set; }

    public virtual Address BillingAddress { get; set; }
    public virtual Address ShippingAddress { get; set; }
}

アドレスクラス

public class Address
{
    public virtual int AddressID { get; set; }
    public virtual string AddressLine { get; set; }
    public virtual string City { get; set; }
    public virtual string State { get; set; }
    public virtual int ZIP { get; set; }
    public virtual string Fax { get; set; }
    public virtual string Country { get; set; }
}

マッピングファイル

customer.hbm.xml

  <class name="Customer" table="Customers">
    <id name="CustomerID">
      <generator class="native" />
    </id>
    <property name="CustomerName" length="100" />
    <property name="Title" length="10" />
    <property name="FirstName" length="60" />
    <property name="LastName" length="60" />
    <property name="Mobile" length="15" />
    <property name="Phone" length="15" />
    <property name="Email" length="100" />
    <many-to-one name="BillingAddress" class="Address" />
    <many-to-one name="ShippingAddress" class="Address" />
  </class>

address.hbm.xml

  <class name="Address" table="Addresses">
    <id name="AddressID">
      <generator class="native" />
    </id>
    <property name="AddressLine" length="255" />
    <property name="City" length="30" />
    <property name="State" length="30" />
    <property name="ZIP" />
    <property name="Fax" length="15" />
    <property name="country" length="50" />
  </class>

nhibernateセッションを使用してデータベーステーブルを作成しています。テーブルはうまく作成されています。上記の構造で、2つのアドレスタイプを指定して顧客を保存する場合、その1つの顧客を顧客テーブルに保存し、2つのアドレスをアドレステーブルに保存するにはどうすればよいですか?次のサンプルコードを参照してください。

Address b_address = new Address();
Address s_address = new Address();
Customer customer = new Customer();

b_address.addressLine = "No.23, New Road";
b_address.City = "Newyork";
// more data

s_address.addressLine = "No.54, Old Road";
// more data

customer.CustomerName = "David";
// more customer data
customer.BillingAddress = b_address;
customer.ShippingAddress = s_address;

//saving the session.
session.save(customer)

上記のコードは、顧客テーブルにデータを挿入するだけです。これを顧客と住所の両方のテーブルに挿入するにはどうすればよいですか?

4

1 に答える 1

1

設定を有効にする必要がありcasacdeます。このように多対一のマッピングを変更するだけです:

<many-to-one name="BillingAddress" class="Address" cascade="all"  />
<many-to-one name="ShippingAddress" class="Address" cascade="all"  />

これにより、NHibernate は新しいAddresses を永続化し、既存の更新を行うことができますが、インスタンスの呼び出しのみをCustomer保存/更新することができます。

于 2012-11-24T06:10:03.483 に答える