#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.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.