我创建了一个带有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,我需要做什么?
答案 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;}