对C#或Linq使用MongoDB和SQL的相同语法

问题描述 投票:5回答:1

注意到MongoDB有不同的关键字,如InsertOne,ReplaceOne等.Linq(语言集成查询)的一个要点就是拥有一种通用语言,人们可以利用依赖注入和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.2&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);
    }
}
c# sql-server mongodb .net-core .net-core-2.0
1个回答
1
投票

我个人觉得Mongodb c#驱动程序有点令人生畏,来自实体框架背景。

值得庆幸的是,我发现了一个名为MongoDAL的抽象层的小宝石,这使得使用Mongodb驱动程序非常容易。

它支持使用ASP.Net Core依赖注入系统注册,或者只使用静态DB类以完全类型安全的方式执行操作并在我的任何集合上编写LINQ查询。您也可以轻松地创建自己的存储库。不必处理ObjectId或BsonDocument类型。

© www.soinside.com 2019 - 2024. All rights reserved.