Недавно я нашел пример отношения NHibernate один-ко-многим.Отображение выглядит следующим образом:
<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 () ... и так далее?Или это так не работает?
Предполагая, что в базовой таблице у Клиента есть только строковый столбец CompanyName, как мне это отобразить?Каким было бы сопоставление, если бы вместо публичной компании Company была бы открытая строка CompanyName в классе Customer?