[英]Auto generate objects Id mongo db c#
我用 C# 學習 mongodb,我想創建一個包含實體列表的記錄,但子實體沒有生成他的對象 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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.