Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 插入不创建Id?_C#_Mongodb_Mongodb .net Driver - Fatal编程技术网

C# 插入不创建Id?

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

我用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; }
}
我希望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;}