插入记录到一个XML表唯一键
-
18-09-2019 - |
题
也许我只是通过SQL宠坏了,但有一些很酷的LINQ方式插入新的记录为“XML表格”并自动索引ID更新(或至少半自动)?
这就是我所说的 “XML表格”:
<myElements>
<myElement>
<id>1</id>
<value>blah</value>
</myElement>
<myElement>
<id>3</id>
<value>blah</value>
</myElement>
<myElement>
<id>4</id>
<value>blah</value>
</myElement>
<myElement>
<id>8</id>
<value>blah</value>
</myElement>
<myElement>
<id>9</id>
<value>blah</value>
</myElement>
</myElements>
在这种情况下,该表是“myElements”和记录是“myElement”分子(即,myElements的儿童)。
“标识”元素被定义为在模式中的密钥,所以它的行为或多或少为“主键”,就像它会在SQL。
所以,我的问题是,我怎么插入新的“myElement”,其中“值”元素是“无所谓”和“ID”元素被自动设置为下一个可用的ID(在这个例子中,这将是最大值(ID)+ 1 = 10)。
我有XML数据库存储在一个XDocument,所以我想使用LINQ和/或的XElement的方法的溶液中。
谢谢!
解决方案
好了,因为我的所有表有一个名为“ID”的元素,我可以写一个非常通用的GetNextAvailableId元素。所以,这里是我如何插入例程将用于“myElement”工作表中。
public virtual int InsertMyElement(string value)
{
int id = GetNextAvailableId("myElement");
TableDictionary["myElement"].Add(
new XElement(_ns + "myElement",
new XElement(_ns + "id", id),
new XElement(_ns + "value", value)));
return id;
}
public virtual int GetNextAvailableId(string tableName)
{
IEnumerable<int> ids =
from
r in TableDictionary[tableName].Elements()
select
int.Parse(r.Element(_ns + "id").Value);
return ids.Max() + 1;
}
我不觉得太大了这个解决方案 - 如果我决定打电话给我的ID以外的东西“ID”这将打破 - 但是看起来它会为现在的工作。
。评论欢迎。
不隶属于 StackOverflow