es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La clave primaria “Id” no funciona al usar .net core web Api CRUD con MongoDb.

Estoy trabajando en la generación de una clave primaria _id para la clase Student mientras uso las operaciones CRUD de .net core web api en una base de datos MongoDB y he intentado literalmente todo y aún no funciona.
Mi clase de documentos es:

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

namespace Entities
{
    public class Student
    {
        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)] 
        public string id { get; set ;}

        public string name { get; set; }
        public int grade { get; set; }
    }
}

Sin embargo, aún me da la oportunidad de ingresar un id mientras pruebo mi API en swagger, así como se muestra en esta imagen: link to image

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En primer lugar, es importante tener en cuenta que de forma predeterminada, MongoDB genera un campo único “_id” para cada documento creado en una colección. Por lo tanto, no es necesario añadir explícitamente un campo “_id” a los documentos que se están creando.

    Sin embargo, si aún desea generar un campo “_id” para su clase “Student”, puede probar el siguiente enfoque:

    1. En primer lugar, asegúrese de haber añadido el controlador .NET de MongoDB a su proyecto utilizando el administrador de paquetes NuGet.
    2. Cree una nueva instancia de cliente de MongoDB y obtenga una referencia a la base de datos y colección con la que desea trabajar. Por ejemplo:

    IMongoClient mongoClient = new MongoClient("mongodb://localhost:27017");
    IMongoDatabase database = mongoClient.GetDatabase("my-db");
    IMongoCollection<student> collection = database.GetCollection<student>("students");
    
    1. En su clase “Student”, elimine las anotaciones “[BsonId]” y “[BsonRepresentation(BsonType.ObjectId)]” de la propiedad “id”.

    2. En su operación CRUD para crear un nuevo objeto estudiante, genere un nuevo ObjectId utilizando el método “ObjectId.GenerateNewId()” y asígnele el valor a la propiedad “id” del objeto estudiante antes de insertarlo en la colección. Por ejemplo:

    [HttpPost]
    public async Task<><student>> CreateStudent(Student student)
    {
        student.id = ObjectId.GenerateNewId().ToString();
        await collection.InsertOneAsync(student);
        return CreatedAtAction(nameof(GetStudentById), new { id = student.id }, student);
    }
    

    Esto debería generar un nuevo campo “_id” para cada objeto estudiante creado y evitar que la interfaz de usuario de Swagger le permita ingresar manualmente un valor “id”.

Comments are closed.