8

我用 getter 和 setter 创建了一个简单的对象:

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 回答