Сопоставление свойства с полем из другой таблицы в NHibernate
-
21-09-2019 - |
Вопрос
рассмотрим следующий класс:
class Order {
int OrderId {get; set;}
int CustomerId {get; set;}
string CustomerName {get; set;}
//other fields go here
}
который сопоставлен с таблицей заказов.Возможно ли сопоставить свойство CustomerName с таблицей Customers через отношение внешнего ключа?
Решение
Да, вы можете использовать Присоединиться элемент отображения для этого.Другой вариант - сопоставить вид вместо таблицы.Но, если возможно, вам следует использовать объектно-ориентированный подход и сопоставить отношения "многие ко многим" между Заказом и Клиентом.
Другие советы
Я настоятельно рекомендую вам не использовать <join/>
для этого.Хотя это позволило бы выполнить то, что вы просили, это создает другие проблемы.
Вместо этого Заказ должен иметь связь с Клиентом.Затем вы можете спроецировать имя, если хотите, хотя его проще просто использовать order.Customer.Name
.
Итак, все сводится к следующему:
1) Добавить Customer
собственность на Order
public virtual Customer Customer { get; set; }
2) Сопоставьте свойство (в примере CustomerID - это имя столбца FK).
<many-to-one name="Customer" column="CustomerId"/>
3) Если вы специально хотите иметь CustomerName
собственность, спроецируйте ее у Заказчика:
public virtual string CustomerName { get { return Customer.Name; } }