好了,有了前面的准備工作,我們可以開始在C#中使用MongoDB了。不過,由於本示例項目的代碼也不少,因此本文將只展示與MongoDB交互的相關代碼,更完整的代碼請自行查閱示例項目。
接下來,本文演示通過C#完成【客戶資料】的一些基本的數據操作,還是先來定義一個客戶資料的類型吧。
public sealed class Customer { [MongoId] public string CustomerID { get; set; } public string CustomerName { get; set; } public string ContactName { get; set; } public string Address { get; set; } public string PostalCode { get; set; } public string Tel { get; set; } }
說明:這就是一個簡單的類,而且代碼中的[MongoId]也是可以不要的(這個后面再說)。
在操作數據庫之前,我要說明一下:MongoDB在使用前,並不要求您事先創建好相應的數據庫,設計數據表結構!
在MongoDB中,沒有【表】的概念,取而代之的是【集合】,也沒有【數據記錄】的概念,取而代之的是【文檔】,我們可以把【文檔】理解成一個【對象】,任意的對象,甚至可以有復雜的嵌套層次。
因此,我們不用再寫代碼從【數據表字段】到C#類的【屬性,字段】的轉換了,現在直接就可以讀寫整個對象了。
而且MongoDB不支持Join操作,所以,如果有【關聯】操作,就需要你自己來處理。
再來定義二個變量:
private static readonly string _connectionString = "Server=127.0.0.1"; private static readonly string _dbName = "MyNorthwind";
新增記錄
public void Insert(Customer customer) { customer.CustomerID = Guid.NewGuid().ToString("N"); // 首先創建一個連接 using( Mongo mongo = new Mongo(_connectionString) ) { // 打開連接 mongo.Connect(); // 切換到指定的數據庫 var db = mongo.GetDatabase(_dbName); // 根據類型獲取相應的集合 var collection = db.GetCollection<Customer>(); // 向集合中插入對象 collection.Insert(customer); } }
上面的代碼中,每一行都有注釋,這里就不再解釋了。
刪除記錄
public void Delete(string customerId) { using( Mongo mongo = new Mongo(_connectionString) ) { mongo.Connect(); var db = mongo.GetDatabase(_dbName); var collection = db.GetCollection<Customer>(); // 從集合中刪除指定的對象 collection.Remove(x => x.CustomerID == customerId); } }
更新記錄
public void Update(Customer customer) { using( Mongo mongo = new Mongo(_connectionString) ) { mongo.Connect(); var db = mongo.GetDatabase(_dbName); var collection = db.GetCollection<Customer>(); // 更新對象 collection.Update(customer, (x => x.CustomerID == customer.CustomerID)); } }
獲取記錄列表
public List<Customer> GetList(string searchWord, PagingInfo pagingInfo) { using( Mongo mongo = new Mongo(_connectionString) ) { mongo.Connect(); var db = mongo.GetDatabase(_dbName); var collection = db.GetCollection<Customer>(); // 先創建一個查詢 var query = from customer in collection.Linq() select customer; // 增加查詢過濾條件 if( string.IsNullOrEmpty(searchWord) == false ) query = query.Where(c => c.CustomerName.Contains(searchWord) || c.Address.Contains(searchWord)); // 先按名稱排序,再返回分頁結果. return query.OrderBy(x => x.CustomerName).GetPagingList<Customer>(pagingInfo); } }
獲取單個對象
public Customer GetById(string customerId) { using( Mongo mongo = new Mongo(_connectionString) ) { mongo.Connect(); var db = mongo.GetDatabase(_dbName); var collection = db.GetCollection<Customer>(); // 查詢單個對象 return collection.FindOne(x => x.CustomerID == customerId); } }