【发布时间】:2018-02-14 23:24:47
【问题描述】:
嘿,我想将一些代表树结构类型的对象放入数据库:
每个 TreeNode 元素,必须有唯一的 id。
我的树节点
public class TreeNode
{
public int Id { get; set; }
public int ParentId { get; set; }
}
我从应用程序前端收到的数据
{
"name": "Tree Node 1",
"children":
[{
"name": "Tree Node 2",
"children":
[{
"name": "Tree Node 3",
"children":
[{
"name": "Tree Node 4",
"children":
[{
"name": "Tree Node 5",
"children":
[{
"name": "Tree Node 6",
"children": [],
"data":
{
}
}]
},
{
"name" : "Tree Node embeded parent 4",
"children": [],
"data":
{
}
}]
}]
}]
}]
}
我的问题是 - 如何为每个节点分配正确的 Id?
我当前的解决方案是,我从数据库中获取最后插入的 Id,并使用它来分配给 concreate TreeObject。它有效,但我觉得它不够好。
这种解决方案至少有一个很大的缺点——如果两个用户同时尝试将数据推送到数据库中会怎样?
假设用户 A,点击了“保存”按钮。 TreeProcessor 从数据库中接收到 100 是最后插入的 Id 的信息。 在 TreeProcessor 以处理数据结束(例如分配 ids)后, 数据已准备好发送到数据库,但突然网络连接变慢...
同时,用户 B 也单击了“保存”,但使用了另一个数据。 由于来自用户 A 的数据,尚未到达数据库,数据库发送 100 作为最后插入的 id .....
【问题讨论】:
-
使用 Guid 作为密钥,
public Guid Id { get; set; }。
标签: c# asp.net .net sql-server asp.net-core