mongodb集成到asp .net Core Web Api項目(源碼可下載)


目錄

linux安裝mongodb

啟動mongodb服務

mongodb集成到asp .net Core Web Api項目(源碼可下載)

 

1.首先我們需要創建一個poems數據庫

進入mongodb安裝的bin目錄

cd /usr/local/mongodb/bin

執行啟動命令

 ./mongod --config /usr/local/mongodb/conf/mongodb.confs

輸入mongo命令

[root@iZwz92gauwq11sx9e2qmpeZ bin]# mongo
MongoDB shell version v4.0.13
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("152de530-65d3-4de1-8cb7-302b3ced501c") }
MongoDB server version: 4.0.13c

執行創建poems數據庫命令

use poems

由於配置了權限認證,我們需要為poems數據庫創建一個用戶

但先要切換到admin庫,然后輸入登錄用戶進行授權驗證

登錄成功后,切回到 poems 庫,就可以為該庫創建用戶了,執行命令如下:

> use admin
switched to db admin
> db.auth('root','123456')
1
> use poems
switched to db poems
> db.createUser({user:'ptest',pwd:'123456987',roles:['readWrite']})
Successfully added user: { "user" : "ptest", "roles" : [ "readWrite" ] }
> 

2.創建 ASP.NET Core Web API 項目

創建net Core項目,將其命名為:PoemsApi,創建項目后,通過NuGet庫引入MongoDB.Driver包

 3.添加實體模型

將 Models 目錄添加到項目根。

使用以下代碼將 FamousPoemsModels類添加到 Models 目錄

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

namespace Models
{
    public class FamousPoemsModels
    {
        public FamousPoemsModels()
        {

        }

        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]
        public string Id { get; set; }
        /// <summary>
        /// 作者
        /// </summary>
        public string vcAuthor { get; set; }
        /// <summary>
        /// 內容
        /// </summary>
        public string vcContent { get; set; }
        /// <summary>
        /// 標題
        /// </summary>
        public string vcTitle { get; set; }
        /// <summary>
        /// 創建時間
        /// </summary>
        [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
        public DateTime dtCreateTime { get; set; }
        /// <summary>
        /// 更新時間
        /// </summary>
        [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
        public DateTime dtUpdateTime { get; set; }
    }
}

4.添加配置模型

(1)、appsettings.json 添加以下數據庫配置值

{
  "MongdbSettings": {
    "FamousPoemsCollectionName": "FamousPoems",
    "ConnectionString": "mongodb://ptest:123456987@120.79.76.160:27017/poems?maxPoolSize=500",
    "DatabaseName": "poems"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

(2)、使用以下代碼將 MongdbSettings.cs 文件添加到 Services目錄 ,Services目錄需要先創建,並在根目錄下

using System;

namespace Service
{
    public class MongdbSettings : IMongdbSettings
    {
        public string FamousPoemsCollectionName { get; set; }
        public string ConnectionString { get; set; }
        public string DatabaseName { get; set; }
    }

    public interface IMongdbSettings
    {
        public string FamousPoemsCollectionName { get; set; }
        string ConnectionString { get; set; }
        string DatabaseName { get; set; }
    }
}

MongdbSettings類用於存儲 appsettings.json 文件的 MongdbSettings 屬性值。 JSON 和 C# 具有相同的屬性名稱,目的是簡化映射過程。

5.將以下突出顯示的代碼添加到 Startup.ConfigureServices

        public void ConfigureServices(IServiceCollection services)
        {
            #region mongodb配置
            services.Configure<MongdbSettings>(
       Configuration.GetSection(nameof(MongdbSettings)));

            services.AddSingleton<IMongdbSettings>(sp =>
                sp.GetRequiredService<IOptions<MongdbSettings>>().Value);

#endregion services.AddControllers(); }

appsettings.json 文件的 MongdbSettings部分綁定到的配置實例在依賴關系注入 (DI) 容器中注冊。 例如,MongdbSettings對象的 ConnectionString 屬性使用 appsettings.json 中的 MongdbSettings:ConnectionString 屬性進行填充。
IMongdbSettings 接口使用單一實例服務生存期在 DI 中注冊。 在注入時,接口實例時將解析為 MongdbSettings對象。

 6.添加 CRUD 操作服務

使用以下代碼將 FamousPoemsService類添加到 Services 目錄

using Models;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Services
{
    public class FamousPoemsService
    {
        private readonly IMongoCollection<FamousPoemsModels> _mongDb;

        public FamousPoemsService(IMongdbSettings settings)
        {
            var client = new MongoClient(settings.ConnectionString);
            var database = client.GetDatabase(settings.DatabaseName);
            _mongDb = database.GetCollection<FamousPoemsModels>(settings.FamousPoemsCollectionName);
        }
        public FamousPoemsModels Insert(FamousPoemsModels model)
        {
            _mongDb.InsertOne(model);
            return model;
        }
        public int InsertManyAsync(List<FamousPoemsModels> list)
        {
            _mongDb.InsertManyAsync(list);
            return list.Count;
        }
        public void Update(string id, FamousPoemsModels model)
        {
            _mongDb.ReplaceOne(m => m.Id == id, model);
        }
        public void Delete(FamousPoemsModels model)
        {
            _mongDb.DeleteOne(m => m.Id == model.Id);
        }
        public FamousPoemsModels Get(string id)
        {
            return _mongDb.Find<FamousPoemsModels>(book => book.Id == id).FirstOrDefault();
        }
        public List<FamousPoemsModels> GetPageList(int nPageIndex = 1, int nPageSize = 10)
        {
            //設置排序字段
            var sort = Builders<FamousPoemsModels>.Sort.Descending(it => it.dtCreateTime);
            return  _mongDb.Find<FamousPoemsModels>(b => true).Sort(sort).Skip((nPageIndex - 1) * nPageSize).Limit(nPageSize).ToList();
        }
      

    }
}

上面的代碼通過構造函數注入從 DI 檢索IMongdbSettings實例。 使用此方法可訪問在添加配置模型部分中添加的 appsettings.json 配置值。

將以下突出顯示的代碼添加到 Startup.ConfigureServices

        public void ConfigureServices(IServiceCollection services)
        {
            #region mongodb配置
            services.Configure<MongdbSettings>(
       Configuration.GetSection(nameof(MongdbSettings)));

            services.AddSingleton<IMongdbSettings>(sp =>
                sp.GetRequiredService<IOptions<MongdbSettings>>().Value);

            services.AddSingleton<FamousPoemsService>(); #endregion
            services.AddControllers();
        }

上面的代碼向 DI 注冊了 FamousPoemsService 類,以支持消費類中的構造函數注入。 單一實例服務生存期是最合適的,因為 FamousPoemsService直接依賴於 MongoClient。 根據官方 Mongo Client 重用准則,應使用單一實例服務生存期在 DI 中注冊 MongoClient。

FamousPoemsService 類使用以下 MongoDB.Driver 成員對數據庫執行 CRUD 操作:

MongoClient:讀取用於執行數據庫操作的服務器實例。 此類的構造函數提供了 MongoDB 連接字符串

        public FamousPoemsService(IMongdbSettings settings)
        {
            var client = new MongoClient(settings.ConnectionString); var database = client.GetDatabase(settings.DatabaseName);
            _mongDb = database.GetCollection<FamousPoemsModels>(settings.FamousPoemsCollectionName);
        }

 7.添加控制器

使用以下代碼將 PoemsController類添加到 Controllers 目錄

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Models;
using Newtonsoft.Json;
using Services;

namespace WebApi.Controllers
{

    public class PoemsController : ControllerBase
    {
        private readonly FamousPoemsService _poemsService;
        public PoemsController(FamousPoemsService poemsService)
        {
            _poemsService = poemsService;
        }
        [HttpPost("Poems/Insert")]
        public ActionResult Insert([FromBody]FamousPoemsModels poems)
        {

            poems.dtCreateTime = DateTime.Now;
            poems.dtUpdateTime = DateTime.Now;
            return Content(JsonConvert.SerializeObject(_poemsService.Insert(poems)));
        }
        [HttpPost("Poems/InsertManyAsync")]
        public ActionResult InsertManyAsync([FromBody]List<FamousPoemsModels> poems)
        {
            return Content(JsonConvert.SerializeObject(_poemsService.InsertManyAsync(poems)));
        }
        [HttpPost("Poems/Update")]
        public ActionResult Update([FromBody]FamousPoemsModels poems)
        {
            _poemsService.Update(poems);
            return NoContent();
        }
        [HttpPost("Poems/Delete")]
        public ActionResult Delete([FromBody]FamousPoemsModels poems)
        {
            _poemsService.Delete(poems);
            return NoContent();
        }
        [HttpGet("Poems/Get")]
        public ActionResult Get(string id)
        {
            return Content(JsonConvert.SerializeObject(_poemsService.Get(id)));
        }
        [HttpGet("Poems/List")]
        public ActionResult GetPageList(int nPageIndex = 1, int nPageSize = 10)
        {
            return Content(JsonConvert.SerializeObject(_poemsService.GetPageList(nPageIndex, nPageSize)));
        }
    }
}

 gitee克隆地址:https://gitee.com/fan_zhongtuan/PoemsApi.git

百度網盤鏈接:https://pan.baidu.com/s/1GGCOfcd3KsUIImiRe68R8g
提取碼:1yf5

mongodb客戶端工具:https://www.jb51.net/article/199496.htm(Navicat Premium 15 永久破解激活工具及安裝教程)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM