2

私は次のクラスを持っています:

public class Customer
{
    public virtual int CustomerID { get; protected set; }
    public virtual string AccountNumber { get; protected set; }
    public virtual string CustomerType { get; set; }
    public virtual int TerritoryID { get; set; }
    public virtual SalesTerritory Territory { get; protected set; }
}

また、FluentNHibernateを使用して次のようにマッピングされています。

    public class CustomerMapper : ClassMap<Customer>
{
    private const string schema = "Sales";
    public CustomerMapper()
    {
        SchemaIs(schema);
        Id(x => x.CustomerID);
        Map(x => x.CustomerType).WithLengthOf(1).Not.Nullable();
        Map(x => x.TerritoryID).Not.Nullable();

        Map(x => x.AccountNumber).ReadOnly()
            .Update(false)
            .Insert(false)
            .Generated(Generated.Insert);

        References<SalesTerritory>(x => x.Territory).TheColumnNameIs(ReflectionHelper.GetProperty<Customer>(x => x.TerritoryID).Name).LazyLoad().Update(false).Insert(false);
    }
}

UpdateメソッドとInsertメソッドは、生成されたマッピングファイルのプロパティのupdate属性とinsert属性を設定する単なる拡張メソッドです。

結果のマッピングファイルは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="true" assembly="Model" namespace="Model" schema="Sales">
    <class name="Customer" table="`Customer`" xmlns="urn:nhibernate-mapping-2.2">
        <id name="CustomerID" column="CustomerID" type="Int32">
            <generator class="identity" />
        </id>
        <property name="AccountNumber" column="AccountNumber" insert="false" update="false" generated="insert" length="100" type="String">
            <column name="AccountNumber" />
        </property>
        <property name="TerritoryID" column="TerritoryID" not-null="true" type="Int32">
            <column name="TerritoryID" />
        </property>
        <property name="CustomerType" column="CustomerType" not-null="true" length="1" type="String">
            <column name="CustomerType" />
        </property>
        <many-to-one lazy="proxy" update="false" insert="false" name="Territory" column="TerritoryID" />
    </class>
</hibernate-mapping>

私の問題は、新しい顧客インスタンスをデータベースに保存するときに、顧客インスタンスのTerritoryプロパティがnullになることです。
データベースに保存した後、このプロパティに正しい値を含めるにはどうすればよいですか?セッションがフラッシュされた後に正しい値を取得するプロパティの生成された属性のようなものを見ています。
または、Customerクラスに問題がありますか?
前もって感謝します。

編集1:このモデルに使用しているデータベースは、AdventureWorks(SQL2005)、テーブルSales.CustomerおよびSales.SalesTerritoryです。

4

2 に答える 2

0

あなたのマッピングは非常に奇妙だと思います...territoryIdプロパティとTerritoryプロパティの関係は何ですか? Territory プロパティをマッピングする多対 1 マッピングでは、 Territory のタイプを指定する必要はありませんか? (販売地域)。2 つのプロパティを同じ列にマッピングしていますが、なぜですか?

于 2009-03-06T19:11:04.447 に答える