2009-07-22 22 views
1

多分私はSQLで甘やかされているかもしれませんが、新しいレコードを「XMLテーブル」に挿入してインデックス付きIDを自動的に更新するためのすばらしいLINQ方法があります少なくとも半自動的に)?一意のキーを持つXMLテーブルにレコードを挿入する

は、ここで私は、「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の子供)。

"id"要素はスキーマ内のキーとして定義されているため、SQLと同じように「基本キー」として多かれ少なかれ動作します。

私の質問は、 "値"要素が "何でも"、 "id"要素が次の利用可能なIDに自動的に設定される新しい "myElement"を挿入する方法です(この例では、 be max(id)+ 1 = 10)である。

私は自分のXMLデータベースをXDocumentに格納しているので、LINQおよび/またはXElementのメソッドを使用するソリューションが必要です。

ありがとうございます!

答えて

0

まあ、すべてのテーブルに "id"という要素があるので、かなり一般的なGetNextAvailableId要素を書くことができました。だから、私の挿入ルーチンが "myElement"テーブルでどのように動作するのかは次のとおりです。私が今までに「ID」以外にも、私のID何かを呼び出すことにした場合、それが壊れる - -

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; 
} 

私は、このソリューションについて、あまりにも偉大な感じることはありませんが、それは今のために働くように思えます。

コメント歓迎。

関連する問題