7

私はこのような2つのクラスを持っています:

public Class Company
{
    public IList<Employee> Employees;
}

public Class Employee
{
    public Company WorkPlace;
}

クラスCompanyのオブジェクトを保存したい場合:

MongoDatabase Database = MongoServer.GetDatabase("db");

var workPlace = new Company();

var employee = new Employee { WorkPalce = workPlace}    
workPlace.Employees = new List<Employee>{ employee };

Database.GetCollection<Company>("company").Save(workPlace);

StackOverFlow例外がスローされます。

4

3 に答える 3

8

これは、クラスが相互に参照することによって形成されたサイクルがあるために発生しています。明らかに、ドライバーはこれを処理する機能を備えておらず、そうすべきだとは確信していません。

このデータをデータベースでどのようにモデル化するかを決定する必要があります。
会社と従業員の2つのコレクションがある場合、データレベルでは、参照用のIDを含める必要があります。

ただし、会社のコレクションが1つしかない場合は、オブジェクト参照ではなくIDを使用して会社を参照するようにemployeeクラスを変更する必要があります。

これはデータベースでのみ発生する必要がありますが、c#コードでモデルを拡張して、状況に適したものに応じて、オブジェクト参照を自動的に追加したり、オブジェクト参照を遅延ロードしたりすることができます(選択したN + 1の問題を回避します)。

于 2011-12-11T06:05:15.380 に答える
0

この質問は、Googleグループでも行われました。

https://groups.google.com/group/mongodb-user/browse_thread/thread/4ea7c6885bfb4f33#

そこにはいくつかの追加の答えがあります。

于 2011-12-12T02:40:41.367 に答える
0

私は、クンデラを試してみることをお勧めします。Mongoの場合はこのような場合に対応できるはずです。

https://github.com/impetus-opensource/Kundera git@github.com:impetus-opensource/Kundera-Examples.gitでkundera-examplesを見てください

于 2011-12-13T07:51:25.817 に答える