[英]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.