簡體   English   中英

自動生成對象 ID mongo db c#

[英]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字段只是一個普通的字段,例如agename 這就是為什么 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM