Картирование одностороннего ManyToMany? - PullRequest
1 голос
/ 18 октября 2010

Я хочу сопоставить следующую компанию по указанному ниже адресу.Я хочу, чтобы это были односторонние отношения, поскольку адресный класс используется несколькими другими классами.

Когда я генерирую схему, таблица соединений создается успешно, но когда я пытаюсь сохранить сущность, ничего не сохраняется всоединительный стол.Только в адресных и фирменных таблицах.Что мне нужно сделать, чтобы сделать эту работу?

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 нет?

1 Ответ

0 голосов
/ 19 октября 2010

Вы должны указать nHibernate, на какой стороне коллекции надеты брюки.Посмотрите, работает ли это:

HasManyToMany(x => x.Addresses)
    .Inverse()
    .Cascade.All();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...