8

ゲッターとセッターを使用して単純なオブジェクトを作成しました。

public class MemberCanonical : IMemberCanonical
{
    public ObjectId Id { get; set; }
    public String username { get; set; }
    public String email { get; set; }
    public String status { get; set; }
    public IEnumerable<string> roles { get; set; }
}

今、私はデータベースに新しいメンバーを挿入したいと思います:

try
{
    memberObj.username = username;
    memberObj.email = email;
    memberObj.status = "active";
    // memberObj.Id = new ObjectId().ToString();
    this.membershipcollection.Insert(memberObj, SafeMode.True);
    return true;
}
catch(Exception ex)
{
    return false;   
}

挿入が一意の _id (Id) を作成することを期待していますが、それは起こっていません。_id フィールドを表示するときに挿入すると、「0000000 ....」が表示されます

Mongo が挿入時に独自の _id を生成するにはどうすればよいですか?

4

3 に答える 3

11

Idプロパティに属性をマークするだけ[BsonId]で、生成されたid値がそこに表示されます。

public class MemberCanonical : IMemberCanonical
{
    [BsonId]
    public ObjectId Id { get; set; }

this.membershipcollection.Insert(memberObj, SafeMode.True);
var idYouLookingFor = memberObj.Id;

または、@Kobiによって提案された別の方法:「Idの代わりに_idフィールド名を使用する」も機能するはずです。

于 2012-11-10T22:22:23.397 に答える
4

属性とコンストラクターの組み合わせを使用し[BsonId]て Id 値を作成します。

例えば

public class Something {

    [BsonId]
    public string Id { get; set; }

    public Something() {
        this.Id = ObjectId.GenerateNewId().ToString();
    }

}

これは、オブジェクトの Id フィールドが常に入力されるようにするためです。エンティティがデータベースから取得されると、Id フィールドはデータベースの実際の Id 値で上書きされます。ウィンウィン。

于 2015-06-26T00:51:47.710 に答える
-1

使用[BsonId]したい固有のプロパティで使用します。タイプを無視しObjectIDて独自のものを作成することもできます。

例えば:

[BsonId]
public string studentid{get; set;}
于 2015-06-25T23:39:06.853 に答える