C# 插入不创建Id?
我用getter和setter创建了一个简单的对象:C# 插入不创建Id?,c#,mongodb,mongodb-.net-driver,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 IEnumer
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; }
}
我希望insert能够创建一个唯一的_id(id),但事实并非如此。在插入时,当我查看_id字段时,我得到“0000000…”
我需要做什么才能让Mongo在插入时生成自己的_id?只需使用
[BsonId]
属性标记您的id属性,生成的id值就会出现
public class MemberCanonical : IMemberCanonical
{
[BsonId]
public ObjectId Id { get; set; }
或者@Kobi建议的另一种方法:“使用_id字段名而不是id”也可以 在要使用的唯一属性上使用
[BsonId]
。您甚至可以忽略ObjectID
类型并创建自己的类型
例如:
[BsonId]
public string studentid{get; set;}
我使用
[BsonId]
属性和构造函数的组合来创建Id值
比如说
公共类{
[BsonId]
公共字符串Id{get;set;}
公开某事{
this.Id=ObjectId.GenerateNewId().ToString();
}
}
这就是为什么我总是有一个对象的填充Id字段。从数据库检索实体时,Id字段将被数据库中的实际Id值覆盖。双赢 有时我喜欢回答一些我一无所知的问题。以下是我发现的:您可以使用
ObjectId.GenerateNewId()
自己生成Id-您可以在MemberCanonical
的构造函数中生成Id,或者在插入ObjectId.Empty
时检查Id。接下来,它可能被称为\u id
,我对此不太确定。我还尝试使用ObjectId?
并将其值设置为null
,但这是一种猜测。当Id类型为ObjectId时,它会自动创建Id。这是意料之中的。如果Id不是ObjectId,则驱动程序将不知道如何创建该Id并使其唯一。因此这必须手动完成。是否有解决方案不需要使用持久性问题(例如对MongoDB类型的依赖性)污染域模型?我只使用了[BsonId]属性,而我没有获得自动生成的Id值。但是,我的Id属性是一个字符串。您知道它是否必须是ObjectId类型吗?顺便说一句,Id属性在其类型为ObjectId
且没有BsonId
属性时更新。这与两年前的答案相同。
this.membershipcollection.Insert(memberObj, SafeMode.True);
var idYouLookingFor = memberObj.Id;
[BsonId]
public string studentid{get; set;}