net example create consultas conectar con collection c# mongodb poco

example - cómo administrar el campo_id cuando se usa POCO con el controlador mongodb c#



mongodb driver c# sample (5)

Agregue una propiedad de la siguiente manera:

public BsonObjectId Id { get; set; }

El controlador MongoDB convierte automáticamente el Id a _id durante la serialización / deserialización.

Si quiero leer y escribir datos mongo con un POCO

public class Thingy { public string Foo {get;set;} } ... coll.Insert(new Thing(Foo = "hello"));

Cuando leo de nuevo, se produce un error que dice que _id es un atributo inesperado (que es) Entonces agregué un campo llamado _id a la clase. Ahora la inserción no funciona diciendo que el campo _id no puede ser nulo. Un atributo BsonIgnoreIfNull probado, que no funcionó.


Cuando inserta un objeto, si no tiene un campo _id , el controlador agrega uno y lo establece en un valor de _id objeto de 12 bytes MongoDB.

Solo necesita agregar una propiedad de Id a su POCO, que se deserializará desde _id :

public class Thingy { public ObjectId Id { get; set; } }

O, si desea delegar otra propiedad para _id a _id entonces puede decorarla con el BsonIdAttribute , como este:

[BsonId] public ObjectId MyKey { get; set; }

El campo _id no tiene que ser un ObjectId MongoDB, puede configurarlo a cualquier valor de cualquier tipo de datos (excepto una matriz), solo debe ser único dentro de la colección.



Generalmente envuelvo a Thingy:

public class MongoThingy { public ObjectId Id { get; set; } public Thingy Thingy { get; set; } }

Lo hace mucho más fácil, ya que muchas veces la clase Thingy proviene de una biblioteca diferente sobre la que no tengo control. También es más fácil deserializar para entregarlo a otra persona para su procesamiento.


public class Thingy { public ObjectId Id { get; set; } public string Foo { get; set; } }

Segun la clase

Donde sea necesario, use el siguiente código:

var collection = database.GetCollection<Thingy>("db_Thingy"); Thingy tg= new Thingy(); tg.Foo = "Hello"; collection.insert(tg);