Я хочу сопоставить следующую компанию по указанному ниже адресу.Я хочу, чтобы это были односторонние отношения, поскольку адресный класс используется несколькими другими классами.
Когда я генерирую схему, таблица соединений создается успешно, но когда я пытаюсь сохранить сущность, ничего не сохраняется всоединительный стол.Только в адресных и фирменных таблицах.Что мне нужно сделать, чтобы сделать эту работу?
public CompanyMapping()
{
Map(x => x.Name);
HasManyToMany(x => x.Addresses);
}
public AddressMapping()
{
Id(x => x.Id);
Map(x => x.AddressLineOne)
.Not.Nullable();
Map(x => x.AddressLineTwo)
.Nullable();
Map(x => x.PostCode)
.Not.Nullable();
Map(x => x.City)
.Not.Nullable();
}
public class HasManyToManyCascadeConvention : IHasManyToManyConvention
{
public void Apply(IManyToManyCollectionInstance instance)
{
instance.Cascade.All();
instance.Inverse();
instance.Key.ForeignKey(Inflector.Underscore("fk_" + instance.EntityType.Name + "_" + instance.ChildType.Name));
}
}
<class xmlns="urn:nhibernate-mapping-2.2" name="Company" table="`company´">
<id name="Id">
<column name="company_id" />
<generator class="identity" />
</id>
<bag table="company_address" lazy="false" cascade="save-update" name="Addresses">
<key column="company_id" />
<many-to-many class="Address" column="address_id" />
</bag>
<property name="Name">
<column name="name" />
</property>
</class>
РЕДАКТИРОВАТЬ 2010-11-05: Если я добавлю сопоставления для BillingAddress и DeliveryAddress, как это у меня нет проблем.
References(x => x.BillingAddress)
.Column("billing_address_id")
.ForeignKey("fk_account_billing_address")
.Cascade.All()
.Fetch.Join();
References(x => x.DeliveryAddress)
.Column("delivery_address_id")
.ForeignKey("fk_account_delivery_address")
.Cascade.All()
.Fetch.Join();
В рельсах я бы использовал полиморфную ассоциацию, и я предполагаю, что это означает, что каких-либо отношений в NHibernate нет?