Рассмотрим связь между этими двумя классамиКак ссылаться на свойства класса и ид отношений в NHibernate
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;}
}
Я понимаю, что мне не нужно CUSTOMERID собственности на ордена и я согласен что это не самый прекрасный способ сделать что-то. Имея только свойство Клиента, я мог бы легко запросить Order.Customer.CustomerId, чтобы получить Идентификатор Клиента.
Но в этом случае, NHibernate будет инициировать запрос к базе данных, чтобы загрузить клиент и есть некоторые (многие на самом деле) случаи, которые я просто нуждаюсь в CUSTOMERID из ордена. В этом случае CustomerId в классе Прикладной код будет полезен и потребует меньше поездок в базу данных. (Если я ошибаюсь, поправьте меня пожалуйста).
Вопрос 1: есть ли способ сообщить NHibernate, что я хочу, чтобы оба свойства всегда обновлялись?
Свойства CustomerId всегда будет иметь идентификатор Клиента и имущество клиента будет загружен лениво, только если я хочу (скажем, чтобы получить имя клиента). Microsoft Entity Framework позволяет это.
Вопрос 2: Если это невозможно, я должен беспокоиться об этом?
UPDATE
Следуя инструкциям ответы, которые я сделал тест, пытаясь проверить, почему (в моем случае) NHibernate не работает, как ожидалось, и нашел что-то интересное: NHibernate не задевала базу данных по умолчанию при заказе .Customer.CustomerId if Я не использую Accessor.Field mapping свойство CustomerId.
При использовании Accessor по умолчанию он работает должным образом. Любая идея почему?
Вы ошибаетесь в том, что order.customer.id вызывает звонок в базу данных. Я бы рекомендовал отказаться от внешнего ключа. Поэтому q1 и q2 являются избыточными – Rippo
@Rippo: тот же комментарий, который я сделал в ответе penfold: возможно, я что-то делаю неправильно, но в тесте A.B.Id попал в базу данных. Что-то о картировании «много-к-одному»? Хочешь ли? –
@RogerKiihl: Без просмотра сопоставлений и тестового кода невозможно сказать. Можете ли вы обновить свой вопрос с помощью сопоставления для этих классов и тестового кода, который вы использовали? – mickfold