Может кто-нибудь помочь мне с наилучшим способом отобразить следующую ситуацию в беглом nHibernate?Класс Address используется как в Client, так и в Company.Как я могу сохранить его наиболее эффективным в SQL?И как должно выглядеть отображение?Я думал о нескольких вариантах, но у меня недостаточно опыта работы с nHibernate для следующих ситуаций:
использовать 1 объект адреса и 1 таблицу и использовать столбец знаменателя, чтобы различать адрес дляклиент и адрес для компании -> как это реализовать в nHibernate?
использовать 1 объект адреса и 2 таблицы (ClientAddresses и CompanyAddresses) -> но я могу определить только 1 таблицу вотображение класса Address
использует 2 адресных объекта и 2 таблицы -> не очень элегантно
Я только что наткнулся на эту проблемукогда я начал внедрять корпоративный класс и понял, что ему также нужно несколько адресов.До сих пор у меня был класс Address и Client, и между ними было сопоставление «один ко многим».В базе данных адрес имел дополнительный столбец с именем ClientId.Но с введением класса Company я застрял ...
Любая помощь будет принята с благодарностью.
В настоящее время я работаю в среде sharparch 1.5, которая использует автоматическое сопоставление и файлы сопоставленияпохожи на это:
public class AddressMap : IAutoMappingOverride<Address>
{
public void Override(AutoMapping<Address> mapping)
{
mapping.Table("addresses");
mapping.Id(x => x.Id, "AddressGuid")
.UnsavedValue(Guid.Empty)
.GeneratedBy.GuidComb();
mapping.References(x => x.Client, "ClientGuid");
}
}
Ниже приведен еще один код, иллюстрирующий проблему:
Адрес
public class Address
{
public virtual string StreetLine1 { get; set; }
public virtual string StreetLine2 { get; set; }
public virtual string PostalCode { get; set; }
public virtual string City { get; set; }
public virtual string Country { get; set; }
}
, который имеет следующую таблицу:
tablename = address
fields = AddressGuid, StreetLine1, StreetLine2, PostalCode, City, Country
Клиент
public class Client
{
public IList<Address> Addresses {get;set;}
}
Компания
public class Company
{
public IList<Address> Addresses {get;set;}
}