上下文:我们具有以下类的定义:
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)删除节点1
但是
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
session.SaveOrUpdate(network);
transaction.Commit();
}
session.Flush();
}
给我一个错误“由于外来恒星而无法删除”。
仅当我更改映射以添加ForeignKey(“ none”)时,它才有效。我还检查了sql语句的输出日志,它确实表明链接的update语句在删除节点之前出现。但是为什么它仍然会出现上述错误?