MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Perilaku aneh penyedia LINQ MongoDB untuk bidang yang disebut id

MongoDB mengharuskan setiap dokumen yang disimpan dalam database memiliki bidang (di tingkat root) yang disebut "_id".

Driver C# mengasumsikan bahwa bidang apa pun di kelas Anda yang disebut "Id", "id" atau "_id" dimaksudkan untuk dipetakan ke bidang "_id" khusus. Ini adalah konvensi, yang bisa ditimpa. Driver C# tidak mengetahui bahwa kelas Result Anda tidak dimaksudkan untuk digunakan sebagai dokumen root dari suatu koleksi, sehingga ia menemukan bidang "id" Anda dan memetakannya ke "_id" di database.

Salah satu cara Anda dapat mengganti ini adalah dengan mengubah nama bidang di kelas Anda (seperti yang Anda temukan). Apa yang kemudian dapat Anda lakukan juga adalah menggunakan atribut [BsonElement] untuk memetakan nama bidang C# Anda (misalnya "idd") ke nama apa pun yang sebenarnya digunakan dalam database (misalnya "id"). Misalnya:

public class Result
{
    [BsonElement("id")]
    public int idd; // matches "id" in the database
    // other fields
}

Alternatif lain adalah mengganti konvensi yang menemukan anggota "Id" dari suatu kelas untuk menekan perilaku default driver C# untuk kelas Hasil Anda. Anda dapat melakukan ini dengan mendaftarkan ConventionProfile baru untuk kelas Hasil Anda. Misalnya:

var noIdConventions= new ConventionProfile();
noIdConventions.SetIdMemberConvention(new NamedIdMemberConvention()); // no names
BsonClassMap.RegisterConventions(noIdConventions, t => t == typeof(Result));

Anda harus yakin untuk melakukan ini di awal program Anda, sebelum kelas Hasil Anda dipetakan.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Repositori dan pewarisan mongodb data pegas

  2. mongoDB:bagaimana cara memeriksa keberadaan kunci dict dalam dict bersarang?

  3. Penerapan MongoDB yang Aman di Amazon AWS

  4. apa format arsip mongodb?

  5. Bagaimana cara menyimpan array objek ke DB luwak hanya dengan satu panggilan?