NHibernate «многие ко многим» удаляет все ассоциации перед вставкой - PullRequest
4 голосов
/ 03 декабря 2009

У меня есть таблица Users и таблица Networks с отношением «многие ко многим» между ними (пользователь может быть длинным для нескольких сетей, а сеть может содержать много пользователей). Отношение «многие ко многим» содержится в таблице «UserNetworks», в которой просто есть два столбца: UserId и NetworkId.

Мои занятия выглядят так:

public class User
{
    public IList<Network> Networks {get; set;}
}

public class Network
{
    public IList<Usre> Users {get; set;}
}

Отображения NHibernate для этих коллекций многие-ко-многим выглядят следующим образом:

User.hbm.xml:

<bag name="Networks" table="UserNetworks" cascade="save-update" inverse="true">
    <key column="UserId" />
    <many-to-many class="Network" column="NetworkId" />
</bag>

Network.hbm.xml:

<bag name="Users" table="UserNetworks" cascade="save-update">
    <key column="NetworkId" />
    <many-to-many class="User" column="UserId" />
</bag>

В своем коде я создаю связь между пользователем и сетью, например, так:

user.Networks.Add(network);
network.Users.Add(user);

Я ожидал бы, что при запуске SQL будет просто выполнена одна ВСТАВКА в таблицу UserNetworks. Вместо этого он выполняет DELETE для таблицы UserNetworks с NetworkID = X, а затем переустанавливает все строки UserNetworks обратно вместе с новой ассоциацией.

Что я делаю не так?

1 Ответ

5 голосов
/ 03 декабря 2009

Поведение - это дизайн. Видите, NH не знает, что сейчас / новое / удалено в списке. Поэтому, удалив все и вставив в список все, что имеет смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...