Контекст: у нас есть следующее определение классов:
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, он показал, что оператор обновления ссылки предшествует удалению узла.Но почему это все еще дает вышеупомянутую ошибку?