自动生成对象 Id mongo db c#
Auto generate objects Id mongo db c#
我学习 mongodb 使用 C#,我想创建一个包含实体列表的记录,但子实体没有生成他的对象 ID。
这是我的代码:
public class Curso
{
[BsonId]
public ObjectId _id { get; set; }
[BsonElement("descripcion")]
public string descripcion { get; set; }
[BsonElement("horas")]
public int horas { get; set; }
[BsonElement("alumnos")]
public IEnumerable<Alumno> alumnos { get; set; }
public Curso()
{
}
}
校友实体:
public class Alumno
{
[BsonId]
public ObjectId _id { get; set; }
[BsonElement("name")]
public string name { get; set; }
[BsonElement("age")]
public int age { get; set; }
}
我插入了一个新课程,自动生成 id Curso 有效,但 Alumno id 没有生成,而是设置为 "000000000000000000000000"
。
public Curso create(Curso curso)
{
db.GetCollection<Curso>("curso").Save(curso);
return curso;
}
结果:
{ "_id" : ObjectId("5a766ec765583a0f90bc0edf"), "descripcion" : "JAVA + JPA", "horas" : 200, "alumnos" : [ { "_id" : ObjectId("000000000000000000000000"), "name" : "Catalina Castillo", "age" : 22 }, { "_id" : ObjectId("000000000000000000000000"), "name" : "Marcia Pardo", "age" : 45 }, { "_id" : ObjectId("000000000000000000000000"), "name" : "Will Smith", "age" : 24 } ] }
每个 MongoDB 文档应该有 _id
具有唯一值的字段。这就是为什么当您传递带有零 _id
的 Curso
文档时,MongoDB 会为您生成它。
然而,嵌入式文档并非如此。对于MongoDB,嵌入文档中的_id
字段只是一个普通字段,如age
或name
。这就是为什么 MongDB 不会为填充 _id
嵌入式文档而烦恼并在您通过时保存它们,即零填充。
所以您应该自己为 Alumno._id
生成值。您可以在 Alumno
构造函数中或在将文档插入数据库之前执行此操作:
public class Alumno
{
[BsonId]
public ObjectId _id { get; set; }
[BsonElement("name")]
public string name { get; set; }
[BsonElement("age")]
public int age { get; set; }
public Alumno()
{
_id = ObjectId.GenerateNewId();
}
}
您还可以使用以下属性声明您的 属性:
[BsonId(IdGenerator = typeof(ObjectIdGenerator))]
public ObjectId? _id { get; set; }
这将生成一个 ID。
我学习 mongodb 使用 C#,我想创建一个包含实体列表的记录,但子实体没有生成他的对象 ID。
这是我的代码:
public class Curso
{
[BsonId]
public ObjectId _id { get; set; }
[BsonElement("descripcion")]
public string descripcion { get; set; }
[BsonElement("horas")]
public int horas { get; set; }
[BsonElement("alumnos")]
public IEnumerable<Alumno> alumnos { get; set; }
public Curso()
{
}
}
校友实体:
public class Alumno
{
[BsonId]
public ObjectId _id { get; set; }
[BsonElement("name")]
public string name { get; set; }
[BsonElement("age")]
public int age { get; set; }
}
我插入了一个新课程,自动生成 id Curso 有效,但 Alumno id 没有生成,而是设置为 "000000000000000000000000"
。
public Curso create(Curso curso)
{
db.GetCollection<Curso>("curso").Save(curso);
return curso;
}
结果:
{ "_id" : ObjectId("5a766ec765583a0f90bc0edf"), "descripcion" : "JAVA + JPA", "horas" : 200, "alumnos" : [ { "_id" : ObjectId("000000000000000000000000"), "name" : "Catalina Castillo", "age" : 22 }, { "_id" : ObjectId("000000000000000000000000"), "name" : "Marcia Pardo", "age" : 45 }, { "_id" : ObjectId("000000000000000000000000"), "name" : "Will Smith", "age" : 24 } ] }
每个 MongoDB 文档应该有 _id
具有唯一值的字段。这就是为什么当您传递带有零 _id
的 Curso
文档时,MongoDB 会为您生成它。
然而,嵌入式文档并非如此。对于MongoDB,嵌入文档中的_id
字段只是一个普通字段,如age
或name
。这就是为什么 MongDB 不会为填充 _id
嵌入式文档而烦恼并在您通过时保存它们,即零填充。
所以您应该自己为 Alumno._id
生成值。您可以在 Alumno
构造函数中或在将文档插入数据库之前执行此操作:
public class Alumno
{
[BsonId]
public ObjectId _id { get; set; }
[BsonElement("name")]
public string name { get; set; }
[BsonElement("age")]
public int age { get; set; }
public Alumno()
{
_id = ObjectId.GenerateNewId();
}
}
您还可以使用以下属性声明您的 属性:
[BsonId(IdGenerator = typeof(ObjectIdGenerator))]
public ObjectId? _id { get; set; }
这将生成一个 ID。