Используйте тот же синтаксис для MongoDB и SQL с помощью C # или Linq

#c# #sql-server #mongodb #.net-core #.net-core-2.0

#c# #sql-сервер #mongodb #.net-ядро #.net-core-2.0

Вопрос:

Заметил, что в MongoDB разные ключевые слова, такие как insertOne, ReplaceOne и т. Д. Суть Linq (Language Integrated Query) заключалась в том, чтобы иметь универсальный язык, на котором люди могли бы использовать внедрение зависимостей и переключаться между SQL или NoSQL без значительного изменения синтаксиса. SQL использует .Add() и Remove() .

Есть ли простой способ сделать так, чтобы у них был похожий синтаксис?

SQL:

https://docs.microsoft.com/en-us/ef/core/saving/basic

MongoDB:

https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mongo-app?view=aspnetcore-2.2amp;tabs=visual-studio

https://docs.mongodb.com/manual/reference/method/db.collection.insertOne/

 public BookService(IConfiguration config)
    {
        var client = new MongoClient(config.GetConnectionString("BookstoreDb"));
        var database = client.GetDatabase("BookstoreDb");
        _books = database.GetCollection<Book>("Books");
    }

    public List<Book> Get()
    {
        return _books.Find(book => true).ToList();
    }

    public Book Get(string id)
    {
        return _books.Find<Book>(book => book.Id == id).FirstOrDefault();
    }

    public Book Create(Book book)
    {
        _books.InsertOne(book);
        return book;
    }

    public void Update(string id, Book bookIn)
    {
        _books.ReplaceOne(book => book.Id == id, bookIn);
    }

    public void Remove(Book bookIn)
    {
        _books.DeleteOne(book => book.Id == bookIn.Id);
    }

    public void Remove(string id)
    {
        _books.DeleteOne(book => book.Id == id);
    }
}
 

Ответ №1:

Я лично нахожу драйвер Mongodb c # немного пугающим, исходя из фона Entity Framework.

Однако я создал уровень абстракции под названием MongoDAL, который упрощает работу с драйвером Mongodb.

Он поддерживает регистрацию с ASP.Net Core dependency injection system или просто используйте статический класс DB для выполнения операций и написания запросов LINQ к любой из ваших коллекций полностью типобезопасным способом. Вы также можете легко создавать свои собственные репозитории с его помощью. Также не нужно иметь дело с типами ObjectId или BsonDocument.