.net core连接MongoDB
前兩天在學習MongoDB相關的知識,做了個小Demo,做的是省份下面有多少所學校,嗯,做的比較粗暴。。。
連接MongoDB首先要通過Nuget添加一個MongoDB的包,下載此包
安裝完畢后開始寫代碼了,創(chuàng)建一個省份實體,一個學校實體
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>
? ? ? ? /// 省份里有多個學校? 這里用集合保存
? ? ? ? /// </summary>
? ? ? ? public IList<School> SchoolName { get; set; }
? ? }
}
namespace MongoCore.Models
{
? ? ? ? //用于后面添加學校
? ? ? ? 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
namespace MongoCore.Models
{
? ? public class ProvinceContext
? ? {
? ? ? ? //定義數(shù)據(jù)庫
? ? ? ? private readonly IMongoDatabase _database = null;
? ? ? ? public ProvinceContext()
? ? ? ? {
? ? ? ? ? ? //連接服務器名稱? mongo的默認端口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)建控制器
public async Task<IActionResult> Index() { ? ? ? ? ?
?var list = await _context.Province.Find(_ => true).ToListAsync(); ? ? ? ? ? ?return View(list); }
視圖
@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>
運行的時候修改配置在Startup.cs里
運行效果是這樣的,現(xiàn)在還沒有數(shù)據(jù),
點擊新建按鈕添加省份,這里我添加了湖北省
添加省份代碼如下:后端
public IActionResult Create()
? ? ? ? {
? ? ? ? ? ? return View();
? ? ? ? }
? ? ? ? [HttpPost]
? ? ? ? [ValidateAntiForgeryToken]
? ? ? ? public async Task<ActionResult> Create(Province item)
? ? ? ? {
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? //初始化學校類型數(shù)據(jù)
? ? ? ? ? ? ? ? item.SchoolName = new List<School>();
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? await _context.Province.InsertOneAsync(item);
? ? ? ? ? ? ? ? return RedirectToAction(nameof(Index));
? ? ? ? ? ? }
? ? ? ? ? ? catch
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return View();
? ? ? ? ? ? }
? ? ? ? }
視圖:
@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>
接下來就是添加省份下面的學校了
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);
? ? ? ? ? ? //添加學校
? ? ? ? ? ? item.SchoolName.Add(sl);
? ? ? ? ? ? //更新
? ? ? ? ? ? ReplaceOneResult actionResult
? ? ? ? ? ? ? ?= await _context.Province
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?.ReplaceOneAsync(n => n.ProvinceID.Equals(ProvinceID)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?, item
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?, new UpdateOptions { IsUpsert = true });
? ? ? ? ? ? return RedirectToAction(nameof(Index));
? ? ? ? }
視圖:
@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">學校名稱</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>
然后添加學校,我添加了兩所學校,在MongoDB里可以看到數(shù)據(jù)
原文地址:http://www.cnblogs.com/lcq529/p/8398004.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的.net core连接MongoDB的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在.NET Core中处理一个接口多个不
- 下一篇: 聊聊AspectCore动态代理中的拦截