2012-03-16 3 views
0

最近NHibernateの1対多の関係でan exampleが見つかりました。マッピングは、このように書きます:NHibernateの1対多の例です。これはコードのにおいですか?

<class name="Company" table="Company"> 
    <id name="Id" type="Int32" unsaved-value="0"> 
     <generator class="identity"/> 
    </id> 
    <version name="Version"/> 
    <property name="Name"/> 
    <set name="Customers" inverse="true" lazy="true" > 
     <key column="Id"/> 
     <one-to-many class="Customer"/> 
    </set> 
</class> 

<class name="Customer" table="Customer"> 
    <id name="Id" type="Int32" unsaved-value="0"> 
     <generator class="identity"/> 
    </id> 
    <version name="Version"/> 
    <property name="DateOfBirth"/> 
    <property name="FirstName"/> 
    <property name="Surname"/> 
    <many-to-one name="Company" column="CompanyId" cascade="all-delete-orphan"/> 
</class> 

そして、これはクラスです:私はこのコードについては好きではない何

public class Company 
{ 
    private ISet<Customer> customers = new HashedSet<Customer>(); 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int Version { get; set; } 
    public ISet<Customer> Customers 
    { 
     get { return customers; } 
     set { customers = value; } 
    } 
} 

public class Customer 
{ 
    public Company Company { get; set; } 
    public DateTime? DateOfBirth { get; set; } 
    public string FirstName {get;set;} 
    public int Id { get; set; } 
    public string Surname {get;set;} 
    public int Version { get; set; } 
} 

子内部の親を含め、内部全体カンパニーオブジェクトであります顧客のもの。これは循環参照ではありません。つまり、このグラフが読み込まれても、currentCustomer.Company.Customers.First()。Company.Customers.Last()などのようなことはできません。それともそのようには機能しませんか?

Customerに文字列CompanyNameのみがあると仮定すると、どのようにマップできますか?パブリックカンパニーの代わりにマッピングを使用すると、Customerクラスのパブリック文字列CompanyNameを使用できますか?

+0

inverse属性をtrueに設定した理由は何ですか?パフォーマンス上の理由はありますか? –

答えて

5

はいあなたが書くことができます:あなたは、オープンセッション内たい

currentCustomer.Company.Customers.First().Company.Customers.Last() 

など、多くの時間を、これはすべての後、顧客のコレクションを取得するために(おそらく1)、その後、会社をロードするためのクエリを発行し、かつますメモリ内で発生します。おそらくそれほど有用ではないという事実を別にすれば、それについてはそれほど奇妙なことはありません。会社名を持っているだけの場合は、文字列型の単純なプロパティとしてマップすることができます。

+0

+1それについて何も変なことはありません。あなたがそのコードを書いたら、それ以外に何ができると思いますか?同社は顧客の会社であり、同社の最初の顧客も顧客であり、以下同様である。 – Henry

関連する問題