插入不创建ID?

时间:2012-11-10 17:32:03

标签: c# mongodb mongodb-.net-driver

我创建了一个带有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;   
}

我希望insert能够创建一个唯一的_id(Id),但这并没有发生。当我查看_id字段时插入,我得到“0000000 ....”

为了让Mongo在插入时生成自己的_id,我需要做什么?

3 个答案:

答案 0 :(得分:11)

只需使用[BsonId]属性标记您的Id属性,生成的ID值即可!

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

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

或者替代方式,@ Kobi建议:“使用_id字段名称代替Id”也应该有效。

答案 1 :(得分:4)

我使用[BsonId]属性和构造函数的组合来创建Id值。

例如

public class Something {

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

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

}

这样我总是有一个填充对象的Id字段。从数据库中检索实体时,Id字段将被数据库中的实际Id值覆盖。赢了。

答案 2 :(得分:-1)

在您要使用的任何唯一媒体资源上使用[BsonId]。您甚至可以忽略ObjectID类型并创建自己的类型。

例如:

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