これら2つのクラス間の関係を検討してください
public class Order
{
public int OrderId {get;set;}
public int CustomerId {get;set;} // Should this be here?
public Customer Customer{get;set}
}
public class Customer
{
public int CustomerId {get;set;}
public string Name {get;set;}
}
OrderでCustomerIdプロパティが必要ないことを理解し、それが最も美しいOOの方法ではないことに同意します。Customerプロパティしかないので、Order.Customer.CustomerIdに顧客のIDを取得するように簡単に要求できます。
しかしその場合、NHibernateはその顧客をロードするためにデータベースへのリクエストをトリガーし、注文のCustomerIdが必要な場合がいくつかあります(実際には多くの場合)。この場合、 OrderクラスのCustomerIdは有用であり、データベースへのアクセスが少なくて済みます。(私がこれについて間違っている場合は、私を訂正してください)。
質問1:両方のプロパティを常に更新するようにNHibernateに伝える方法はありますか?
プロパティCustomerIdには常にCustomerのIDがあり、プロパティCustomerは、必要な場合にのみlazyによってロードされます(たとえば、顧客の名前を取得する場合)。MicrosoftEntityFrameworkはこれを可能にします。
質問2:それが不可能な場合、私はこれについて心配する必要がありますか?
アップデート
回答の指示に従って、(私の場合)NHibernateが期待どおりに機能しなかった理由を確認するためのテストを行い、興味深いものを見つけました。Accessorを使用しない場合、NHibernateはデフォルトでOrder.Customer.CustomerIdでデータベースにアクセスしません。 CustomerIdプロパティのフィールドマッピング。
デフォルトのアクセサーでは、期待どおりに機能します。なぜですか?