iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
自我挑戰組

打造自己的Medium系列 第 4

Day4 ASP.NET Core連線到MongoDB

  • 分享至 

  • xImage
  •  

搭配Day1提到的功能,先建立使用者資訊,所以這裡示範的是UserService

建立MongoDB連線的步驟

1. 安裝套件

dotnet add package MongoDB.Driver

2. 在appsetting.json加入連線資訊

connection string可以直接從Atlas MongoDB獲得

{
  "MongoDbSettings": {
    "ConnectionString": "<connection string>",
    "DatabaseName": "<database name>"
  },
}

2. 在Models下建立MongoDbSettings.cs

定義類別

public class MongoDbSettings
{
    public string ConnectionString { get; set; } = null!;
    public string DatabaseName { get; set; } = null!;
}

4.加入AppMongoDbContext.cs

這個是因為我懶得在每一個service裡,再寫一次連線,所以把collection集中起來。

有先在Models下建立User類別的定義了,所以可以直接在這裡用:

public class AppMongoDbContext
{
    private readonly IMongoDatabase _database;

    public AppMongoDbContext(IOptions<MongoDbSettings> settings)
    {
        var client = new MongoClient(settings.Value.ConnectionString);
        _database = client.GetDatabase(settings.Value.DatabaseName);
    }

    public IMongoCollection<User> Users => _database.GetCollection<User>("Users");

    // 加入更多的collection
}

5. 在Program.cs加入這兩行

var builder = WebApplication.CreateBuilder(args);
// 下面兩行
builder.Services.Configure<MongoDbSettings>(
    builder.Configuration.GetSection("MongoDbSettings"));

builder.Services.AddSingleton<AppMongoDbContext>()

6. 在UserService.cs中使用

public class UserService
{
    private readonly IMongoCollection<User> _users;

    public UserService(AppMongoDbContext dbContext)
    {
        _users = dbContext.Users;
    }

    public async Task<List<User>> GetUserAsync() => await _users.Find(user => true).ToListAsync();

}

參考資料

  1. MongoDB提供的dotnet連線範例
    這個上次更新是4年前了
  2. Create a web API with ASP.NET Core and MongoDB
    找到這篇,才覺得我前面根本瞎忙/images/emoticon/emoticon45.gif

進度說明

處理資料庫連線

作者的哈拉

原本想講一下結構寫法的,但今天在處理連線的部分,就先分享了,真的是程式寫到哪,文章跟著寫什麼,非常隨性/images/emoticon/emoticon07.gif 雖然可以用mongosh直接建collection,但已經習慣用orm自動/手動migrate,感覺要找一下這邊怎麼用


上一篇
Day3 觀念釐清
下一篇
Day5 Web API 路由
系列文
打造自己的Medium30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言