介紹如何在 ASP.NET 上使用 MongoDB 進行基本 CRUD 的操作。
前言
在上一篇文章中介紹了如何在 Windows 上安裝執行 MongoDB,接下來就來介紹一下如何在 ASP.NET 上使用 MongoDB 進行 CRUD 的操作,MongoDB 對 C# 語言進行了支援並提供了 C# 操作的 Driver,在接下來的步驟裡就是要透過使用 MongoDB C# Driver 來進行操作。
建立網站並安裝 MongoDB C# Driver
首先建立一個測試網站,接著透過 NuGet 直接安裝對於 MongoDB C# Driver 套件,如下。
MongoDB C# Driver 包含了兩個 DLL 及 Bson 與 Driver,Driver 是相依於 Bson 之上,用於處理 Bson 規範的相關工作,例如 I/O、序列化或針對BSON 模型的處理等等,Bson 能夠單獨使用,必要時再透過 Driver 進行操作。
在使用 MongoDB 基本上會 using 以下兩個命名空間。
using MongoDB.Bson;
using MongoDB.Driver;
新增、讀取、更新、刪除操作
建立 MongoDB 連線
在透過 NuGet 安裝好 MongoDB C# Driver 後,就開始來進行最基本的資料庫 CRUD 操作吧,首先建立一個 Product Entity 類別 ,此類別將用於處理存放操作所需用到的屬性,如下。
using MongoDB.Bson.Serialization.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
public class Product
{
[BsonId]
public string ID { get; set; }
public string ProductName { get; set; }
public decimal ProductPrice { get; set; }
}
在以上 Entity 類別中,您會發現在 ID 的地方使用了 BsonIdAttribute 屬性,在 MongoDB 中的 Entity 類別預設是使用 ObjectId 型別當作資料的鍵值,當如果想自訂資料鍵值時,就必須要在自訂的鍵值屬性上加上 BsonIdAttribute 屬性。
接下來建立 ProductDao 類別,此類別將用於處理資料存取的操作,如下
using MongoDB.Bson;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
public class ProductDao
{
public ProductDao()
{
}
}
其次要連線到 MongoDB 需要一組連線字串,而 MongoDB 的連線字串格式如下。
以上是一個本機連線的範例,如果正式發布時可能資料庫與網站不同機器,則連線字串可能會如下所示。
注意,如果連線字串中未包含 mongodb:// 將會發生錯誤。
接下來在 ProductDao 建構子中設定連線字串,當然連線字串要設定到 Web.Config 中會比較恰當,在此請容許我偷懶一下,繼續由毽子中透過 MongoClient 物件依序取得 Server、Database、Collection 物件,如下。
public class ProductDao
{
private MongoClient _mongoClient;
private MongoServer _mongoServer;
private MongoDatabase _mongoDatabase;
private MongoCollection<Product> _mongoCollection;
public ProductDao()
{
// MongoDB 連線字串
string connectionString = "mongodb://localhost";
// 產生 MongoClient 物件
_mongoClient = new MongoClient(connectionString);
// 取得 MongoServer 物件
_mongoServer = _mongoClient.GetServer();
// 取得 MongoDatabase 物件
_mongoDatabase = _mongoServer.GetDatabase("test");
// 取得 Collection
_mongoCollection = _mongoDatabase.GetCollection<Product>("Products");
}
}
以上步驟就是先透過建立 MongoClient 物件取得連線後,在使用 MongoClient 類別的 GetServer() 方法取得服務參考,最後再透過 MongoServer 物件的 GetDatabase(connectionString) 方法取得 MongoDatabase 物件參考,有了 MongoDatabase 物件就可以對該資料庫進行操作了,而上面填入的 test 資料庫則是根據你要操作的資料庫填入資料庫名稱,如 test 資料庫並不存在時,將會自動建立一個 test 資料庫,最後直接取得 Product Collection 物件。
註:針對 MongoDB 中使用的名詞與 SQL Server 上的差異可以參考以下表格。
項目 | SQL Server 名稱 | MongoDB 名稱 |
資料庫 | Database | Database |
資料表 | Table | Collection |
資料列 | Row | Document or BSON Document |
資料欄 | Column | Field |
加入查詢方法
連線撰寫完成後就可以開始撰寫查詢功能,在 ProductDao 類別中加入 GetAll() 方法用來取得全部資料,如下。
public IQueryable GetAll()
{
return _mongoCollection.AsQueryable();
}
加入 GetById(string id) 方法,用來取得單一筆資料。
public Product GetById(string id)
{
var query = Query.EQ(p => p.ID, id);
return _mongoCollection.FindOne(query);
}
在查詢單一筆資料時使用了 Query<T> 類別,Query<T> 類別是一個建構實體查詢條件的物件,透過 Query<T> 類別的 EQ 方法使用 Linq.Expression 比較值是否相等。
加入新增方法
新增直接呼叫 MongoCollection 類別提供的 Insert 方法傳入 Entity 物件即可。
public bool Insert(Product entity)
{
return _mongoCollection.Insert(entity).Ok;
}
加入更新方法
更新直接呼叫 MongoCollection 類別提供的 Save 方法傳入 Entity 物件即可。
public bool Update(Product entity)
{
return _mongoCollection.Save(entity).Ok;
}
加入刪除方法
刪除直接呼叫 MongoCollection 類別提供的 Remove 方法,同樣先建立 Query 物件傳入即可。
public bool DeleteById(string id)
{
var query = Query.EQ(p => p.ID, id);
return _mongoCollection.Remove(query).Ok;
}
當以上 CRUD 方法都建立完成後,就可以在 Page 頁面去呼叫使用,實際操作結果如下。
以上就是 MongoDB 基本的 CRUD 操作方法,實際應用上還有許多方法跟變化可以使用,日後將再繼續補充。
範例程式碼
參考資料
Getting Started with the CSharp Driver
以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)