视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
.net Core连接MongoDB数据库的步骤详解
2020-11-27 22:35:10 责编:小采
文档


前言

前两天在学习MongoDB相关的知识,做了个小Demo,做的是省份下面有多少所学校,嗯,做的比较粗暴。。

我们在MongoDB的官方文档中看到,MongoDb的2.4以上的For .Net的驱动是支持.Net Core 2.0的。

所以,在我们安装好了MangoDB后,就可以开始MangoDB的.Net之旅了。

方法如下:

连接MongoDB首先要通过Nuget添加一个MongoDB的包,下载此包

安装完毕后开始写代码了,创建一个省份实体,一个学校实体

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; }
 }
}

创建上下文类,连接MongoDB

namespace MongoCore.Models
{
 public class ProvinceContext
 {
 //定义数据库
 private readonly IMongoDatabase _database = null;
 public ProvinceContext()
 {
 //连接服务器名称 mongo的默认端口27017
 var client = new MongoClient("mongodb://.......:27017");
 if (client != null)
 //连接数据库
 _database = client.GetDatabase("数据库名");
 }

 public IMongoCollection<Province> Province
 {
 get
 {
 return _database.GetCollection<Province>("Province");
 }
 }
 }
}

创建控制器

private readonly ProvinceContext _context = new ProvinceContext();
 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里

运行效果是这样的,现在还没有数据,

点击新建按钮添加省份,这里我添加了湖北省

添加省份代码如下:后端

public IActionResult Create()
 {
 return View();
 }
 [HttpPost]
 [ValidateAntiForgeryToken]
 public async Task<ActionResult> Create(Province item)
 {
 try
 {
 //初始化学校类型数据
 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里可以看到数据

总结

下载本文
显示全文
专题