2009-07-22 2 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).

XDocument에 저장된 XML 데이터베이스가 있으므로 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; 
} 

나는이 솔루션에 대해 너무 생각하지 않습니다하지만 지금은 작동처럼 보인다.

댓글 환영합니다.

관련 문제