前言
前兩天在學(xué)習(xí)MongoDB相關(guān)的知識,做了個小Demo,做的是省份下面有多少所學(xué)校,嗯,做的比較粗暴。。。
我們在MongoDB的官方文檔中看到,MongoDb的2.4以上的For .Net的驅(qū)動是支持.Net Core 2.0的。
所以,在我們安裝好了MangoDB后,就可以開始MangoDB的.Net之旅了。
方法如下:
連接MongoDB首先要通過Nuget添加一個MongoDB的包,下載此包
安裝完畢后開始寫代碼了,創(chuàng)建一個省份實體,一個學(xué)校實體
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
using MongoDB.Bson.Serialization.Attributes; using System.Collections.Generic; namespace MongoCore.Models { public class Province { [BsonId] public int ProvinceID { get ; set ; } public string ProvinceName { get ; set ; } /// <summary> /// 省份里有多個學(xué)校 這里用集合保存 /// </summary> public IList<School> SchoolName { get ; set ; } } } namespace MongoCore.Models { //用于后面添加學(xué)校 public School(string schoolName, string years) { SchoolName = schoolName; Years = years; } public class School { public string SchoolName { get ; set ; } public string Years { get ; set ; } } } |
創(chuàng)建上下文類,連接MongoDB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
namespace MongoCore.Models { public class ProvinceContext { //定義數(shù)據(jù)庫 private readonly IMongoDatabase _database = null ; public ProvinceContext() { //連接服務(wù)器名稱 mongo的默認(rèn)端口27017 var client = new MongoClient( "mongodb://.......:27017" ); if (client != null ) //連接數(shù)據(jù)庫 _database = client.GetDatabase( "數(shù)據(jù)庫名" ); } public IMongoCollection<Province> Province { get { return _database.GetCollection<Province>( "Province" ); } } } } |
創(chuàng)建控制器
1
2
3
4
5
6
|
private readonly ProvinceContext _context = new ProvinceContext(); public async Task<IActionResult> Index() { var list = await _context.Province.Find(_ => true ).ToListAsync(); return View(list); } |
視圖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
@model List< MongoCore.Models.Province > @{ ViewData["Title"] = "Index"; } < h2 >Index</ h2 > < h2 >Index</ h2 > < a asp-action = "Create" >< input type = "button" value = "新 建" class = "btn btn-default" /></ a > < table class = "table" > < tr > < th >省份ID</ th > < th >省份名稱</ th > < th >操作</ th > </ tr > @foreach (var item in Model) { < tr > < td > @Html.DisplayFor(modelItem => item.ProvinceID) </ td > < td > @Html.DisplayFor(modelItem => item.ProvinceName) </ td > < td > < a asp-action = "Insert" asp-route-ProvinceID = "@item.ProvinceID" >新 增</ a > < a asp-action = "Detail" asp-route-ProvinceID = "@item.ProvinceID" >詳 情</ a > < a asp-action = "Delete" asp-route-ProvinceID = "@item.ProvinceID" >刪 除</ a > </ td > </ tr > } </ table > |
運(yùn)行的時候修改配置在Startup.cs里
運(yùn)行效果是這樣的,現(xiàn)在還沒有數(shù)據(jù),
點擊新建按鈕添加省份,這里我添加了湖北省
添加省份代碼如下:后端
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public IActionResult Create() { return View(); } [HttpPost] [ValidateAntiForgeryToken] public async Task<ActionResult> Create(Province item) { try { //初始化學(xué)校類型數(shù)據(jù) item.SchoolName = new List<School>(); await _context.Province.InsertOneAsync(item); return RedirectToAction(nameof(Index)); } catch { return View(); } } |
視圖:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
@model MongoCore.Models.Province @{ ViewData["Title"] = "Create"; } < h2 >Create</ h2 > < div class = "row" > < div class = "col-md-4" > < form asp-action = "Create" > < div asp-validation-summary = "ModelOnly" class = "text-danger" ></ div > < div class = "form-group" > < label class = "control-label" >省份ID</ label > < input asp-for = "ProvinceID" class = "form-control" /> </ div > < div class = "form-group" > < label class = "control-label" >省份名稱</ label > < input asp-for = "ProvinceName" class = "form-control" /> </ div > < div class = "form-group" > < input type = "submit" value = "保 存" class = "btn btn-default" /> </ div > </ form > </ div > </ div > |
接下來就是添加省份下面的學(xué)校了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public async Task<IActionResult> Insert( int ProvinceID) { var num = await _context.Province.Find(p => p.ProvinceID == ProvinceID).SingleOrDefaultAsync(); return View(num); } [HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> Insert( int ProvinceID, string Years, string SchoolName) { var item = await _context.Province.Find(p => p.ProvinceID == ProvinceID).SingleOrDefaultAsync(); School sl = new School(SchoolName,Years); //添加學(xué)校 item.SchoolName.Add(sl); //更新 ReplaceOneResult actionResult = await _context.Province .ReplaceOneAsync(n => n.ProvinceID.Equals(ProvinceID) , item , new UpdateOptions { IsUpsert = true }); return RedirectToAction(nameof(Index)); } |
視圖:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
@model MongoCore.Models.Province @{ ViewData["Title"] = "Insert"; } < h2 >新增</ h2 > < div class = "row" > < div class = "col-md-4" > < form asp-action = "Insert" > < div asp-validation-summary = "ModelOnly" class = "text-danger" ></ div > < input type = "hidden" asp-for = "ProvinceID" /> < div class = "form-group" > < label class = "control-label" >學(xué)校名稱</ label > < input name = "SchoolName" class = "form-control" /> </ div > < div class = "form-group" > < label class = "control-label" >成立年份</ label > < input name = "Years" class = "form-control" /> </ div > < div class = "form-group" > < input type = "submit" value = "保 存" class = "btn btn-default" /> </ div > </ form > </ div > </ div > |
然后添加學(xué)校,我添加了兩所學(xué)校,在MongoDB里可以看到數(shù)據(jù)
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對服務(wù)器之家的支持。
原文鏈接:http://www.cnblogs.com/lcq529/p/8398004.html