2012-08-28 91 views
2

當我插入到Mongo時,我不想定義_id,但我確實要讀取_id。當使用一個對象,如C#MongoDB - 綁定對象屬性,插入時爲_id null

public class MyClass 
    { 
     public Object _id { get; set;} 
     public String propery1 { get; set; } 
    } 

我寫空_id,如果我這樣做

this.myobj.property1 = "Useless info";  
SafeModeResult result = this.uploads.Insert(uploadedfilecanonical, SafeMode.True); 

我需要爲查詢綁定與插入結合,其中插入不創建單獨的類類型定義_id屬性但可查詢嗎?

回答

2

我不是很瞭解你的問題,所以我會盡我所能。如果您執行插入操作,如果_id爲空,則它將保持爲空。如果您使用保存,它將爲您創建一個標識符,如果它不存在。但是,您使用的是對象作爲您的ID,這很奇怪。我們建議你使用ObjectId,整數,Guid或其他東西。

此外,您可以使用名爲「Id」的屬性,而不是.NET類的非常規_id。或者,您可以使用attribute來表示該ID,或者您可以創建convention以應用通用模式。我強烈建議閱讀tutorial瞭解更多信息。

+0

謝謝。我也從c#驅動程序站點看到:「_id」是存儲在數據庫中的字段的名稱(通常,數據庫中字段的名稱與域類中的字段或屬性的名稱完全相同,但Id是一個例外,並映射到數據庫中的「_id」)。 – goldfinger

+0

是的,這是一個可配置的異常,可以使用不同的約定進行更改。 –

0

只有ObjectIdGuid作爲一種Id屬性在這裏工作。你可以爲屬性命名而不用下劃線(也沒有[BsonId]屬性)。

ObjectId對於mongo來說很自然,服務器會創建它並用它響應,這是最快的方式,AFAIU。 Guid對於.NET來說很自然,但客戶端的Mongo驅動程序會生成此ID並將其編碼爲mongo。 最後2行是.net Guid如何存儲在mongo中。前幾行是天然蒙戈ObjectIdenter image description here

只要你只需要提供一個參考的地方,ObjectId結構應該適合你。

但是,如果你序列化ID你可能會看到不愉快的結果。可以改變BsonRepresentation並使用屬性例如字符串進行轉換。像這樣:

public class SimpleTask 
    { 
     [BsonRepresentation(BsonType.ObjectId)] 
     public string Id { get; set; } 
     public string Subject { get; set; } 
    }