簡體   English   中英

使用官方c#驅動程序在mongodb中保存具有雙向關系的對象

[英]save an object with a bidirectional relationship in mongodb using official c# driver

我有兩個這樣的課:

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

public Class Employee
{
    public Company WorkPlace;
}

當我想保存類公司的對象時:

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異常。

這是因為你有一個由相互引用的類形成的循環,顯然驅動程序沒有能力處理這個問題,我不相信它應該。

您需要決定如何在數據庫中建模此數據。
如果您有兩個集合,一個是公司,另一個是員工,那么在數據級別,您應該只包括引用的ID。

如果您只是擁有一個公司集合,那么您只需要更改員工類以引用具有id而不是對象引用的公司。

這只需要在數據庫中發生,你可以在c#代碼中擴展你的模型,自動添加對象引用或延遲加載它等(避免選擇N + 1問題),具體取決於適合的情況。

谷歌小組也提出了這個問題:

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

那里還有一些額外的答案。

我建議,試試kundera。 它應該能夠為Mongo處理這種情況。

https://github.com/impetus-opensource/Kundera在git@github.com上查看kundera-examples:impetus-opensource / Kundera-Examples.git

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM