Свободный NHibernate SaveOrUpdate выдавать ошибку удаления с ограничением внешнего ключа - PullRequest
0 голосов
/ 05 декабря 2018

Контекст: у нас есть следующее определение классов:

class Network
{
   List<Node> nodes;
   List<Node> links;
}

class Node
{
}

class Link
{
   Node StartNode;
   Node EndNode;
}

Отображение:

public LinkMap()
{
            References(x => x.StartNode, "start_node_id").Class(typeof(Node)).Not.LazyLoad().Index("start_node_index");
            References(x => x.EndNode, "end_node_id").Class(typeof(Node)).Not.LazyLoad().Index("end_node_index");
}

В NodeMap нет кодов отображения, которые ссылаются на класс Link.

Я выполнил операцию, чтобы открыть сеанс и прочитать сеть;тогда предположим, что у нас есть три узла;и одна ссылка (с startnode = node1 и endnode = node2)

1) переназначает начальный узел ссылки на node3

2), удаляет node1

Однако

using (var session = sessionFactory.OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    session.SaveOrUpdate(network);
                    transaction.Commit();
                }
                session.Flush();
            }

выдает ошибку «невозможно удалить из-за иностранной константы».

Это работает, только если я внесу изменение в отображение, добавив ForeignKey ("none").Я также проверил выходной журнал оператора sql, он показал, что оператор обновления ссылки предшествует удалению узла.Но почему это все еще дает вышеупомянутую ошибку?

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