2012-07-18 2 views
0

타사 개발자로부터 Winforms 컨트롤을 가지고 있으며 MongoDB에 직접 데이터를 저장하려고합니다. 자원 목록과 약속 목록이있는 간지 차트입니다. 약속에는 리소스에 대한 약속의 매핑을 담당하는 리소스 목록도 있습니다. 문서가 데이터베이스에 제대로 저장됩니다 MongoDB 및 C#을 사용하여 개체 그래프 직렬화

public class PlanningDocument 
{ 
[BsonId] 
public ObjectId Id { get; set; } 
public string Name { get; set; } 
public ResourceCollection Resources { get; set; } 
public ItemCollection Schedule { get; set; } 
} 

(I 데이터베이스의 내용을 확인 MongoVUE을 사용하고 있습니다)

:

은 스토리지를 단순화하기 위해 나는 "PlanningDocument"라는 클래스를 만들었습니다. 그러나 "일정"컬렉션의 항목에는 프로그램 실행 중일 때와 같이 리소스에 대한 참조가 포함되어 있지 않습니다.

개체간에 참조 된 관계를 저장하려면 어떻게해야합니까?

편집 : 내가 좀 더 구체적인 예와 함께 수행 할 작업을 설명하려고합니다 :

public class Identity 
    { 
     public string Id; 

     public Identity() 
     { 
      Id = Guid.NewGuid().ToString(); 
     } 
    } 

    public class Thing : Identity 
    { 
     public string Name = ""; 
    } 

    public class Drawer : Identity 
    { 
     public List<Thing> SomeThings; 
     public List<Thing> AdditionalThings; 

     public Drawer() 
     { 
      SomeThings = new List<Thing>(); 
      AdditionalThings = new List<Thing>(); 
     } 
    } 

나는 이러한 클래스 "것"과 "서랍"가. 서랍에는 "SomeThings"및 "AdditionalThings"의 항목이 포함될 수 있습니다. 참조가 아닌 - 내가 (여기 "것 1"로 수행 등)을 모두 목록에서 같은 일을 저장할 때

var d = new Drawer(); 
d.AdditionalThings.Add(new Thing() { Name = "Thing 1"}); 
d.AdditionalThings.Add(new Thing() { Name = "Thing 2" }); 
d.AdditionalThings.Add(new Thing() { Name = "Thing 3" }); 

d.SomeThings.Add(new Thing() { Name ="Thing A"}); 
d.SomeThings.Add(d.AdditionalThings[0]); 

는 MongoDB를들은 것 (1)의 사본을 저장합니다.

내 질문 : MongoDB와 C# 드라이버를 복사본 대신 여기에 저장하는 일반적인 방법이 있습니까? 사전 아킴

+0

적어도 순환 참조를 시도하고 저장하는 것은 바람직하지 않습니다. 당신이 저장하려고하는 것이 정확히 무엇인지 명확히하기 위해 다른 수업을 보여줄 수 있습니까? –

+0

다른 클래스는 상당히 복잡하지만 문제를 설명 할 수 있다고 생각합니다. 리소스가 올바르게 저장되었습니다. ItemCollection의 Items에는 Resource에 대한 참조가있는 ResourceCollection이 들어 있습니다. 그러나 저장 후 각 항목의 ResourceCollection은 비어 있습니다. –

+0

어떤 버전의 드라이버를 사용하고 있습니까? –

답변

0

없음에

덕분에, C#을 드라이버에서 자동으로 참조를 저장하는 방법이 없습니다. 이는 참조를 자동으로 저장하는 것이 우리가 런타임에 이러한 참조를 자동으로 해결할 것이라는 것을 암시하는 것처럼 설계된 것입니다.

"물건"개체에는 ID가 있으므로 클라이언트 측에서 작업하거나 위치 지정을 사용하여 적절한 업데이트 문을 작성하여 항목 중 하나를 업데이트 할 때 동기화 상태를 유지하는 것이 어렵지 않습니다 $ 연산자와 update-multi 플래그.