.net Core连接MongoDB
前两天在学习MongoDB相关的知识,做了个小Demo,做的是省份下面有多少所学校,嗯,做的比较粗暴。。。
连接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里可以看到数据
.net Core连接MongoDB的更多相关文章
- java连接mongodb的一个奇葩问题及奇葩解决方式
昨天在eclipse中编写代码,本来连接mongodb进行各项操作都是正常的,但是有一会儿突然之间就没法连接了,还一直抱错,错误如下: 信息: Cluster created with setting ...
- asp.net core集成MongoDB
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言及MongoDB的介绍 最近在整合自己的框架,顺便把MongoDBD的最简单CRUD重构一下作为组件化集成到asp.net ...
- springboot连接mongodb进行CRUD
springboot连接mongodb进行CRUD的过程: 在执行以下操作前已安装了mongodb并创建了用户和数据库,使用Robo 3T可成功连接. 1.创建springboot项目,加入以下mav ...
- nodejs连接mongodb的方法
一. var express = require('express'); var mongodb = require('mongodb'); var app = express(); app.use( ...
- Nodejs开发(2.连接MongoDB)
一.先配置MongoDB Win10下下载那个安装版,zip版的会报却各种DLL,安装在你希望的路径,实在安装错了,就剪切过来也行(本例E:\mongodb). 然后是配置启动脚本,就是写一个bat文 ...
- 在express中使用Mongoose连接MongoDB
为何要学Mongoose? Mongoose是MongoDB的一个对象模型工具,封装了MongoDB对文档的的一些增删改查等常用方法,让NodeJS操作Mongodb数据库变得更加灵活简单. 0.安装 ...
- Java 连接MongoDB
1.驱动 通过java连接MongoDB需要一个java版的驱动 下载地址:http://mongodb.github.io/mongo-java-driver/ 2.连接MongoDB 通过 com ...
- 远程连接mongodb出现 no route to host 和 Connection refused
部署好mongodb服务器后,在客户端安装好php的mongodb扩展,用程序连接mongodb服务器出错:no route to host.搜索了差不多一天的时候都没有相关的解决方法.最后在mong ...
- NOSQL Mongo入门学习笔记 - C++连接Mongodb(三)
OS环境: Centos 7.1 release X86_64 编译环境: G++ 4.8.3 已经成功搭建好了Mongodb,也初步在命令行中的查询与写入数据的基本方法,现在通过C++来连接Mong ...
随机推荐
- windows 异常处理
为了程序的健壮性,windows 中提供了异常处理机制,称为结构化异常,异常一般分为硬件异常和软件异常,硬件异常一般是指在执行机器指令时发生的异常,比如试图向一个拥有只读保护的页面写入内容,或者是硬件 ...
- 【读书笔记】【深入理解ES6】#13-用模块封装代码
什么是模块 模块是自动运行在严格模式下并且没有办法退出运行的 JavaScript 代码. 在模块顶部创建的变量不会自动被添加到全局变量作用域,这个变量仅在模块的顶级作用域中存在,而且模块必须导出一些 ...
- SQL 语句优化方法
尽量避免非操作符的使用,在索引上使用 NOT,<> 等操作符,数据库管理系统是不会使用索引的,可以将查询语句转化为可以使用索引的查询. 避免对查询的列的操作,任何对列的操作都可能导致全表扫 ...
- jq交叉轮播图变种【闪一下黑】
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【Java】CAS的乐观锁实现之AtomicInteger源码分析
1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换,也就是会发生进程的切换.切换涉及 ...
- 视觉slam十四讲习题ch3-6
题目回顾: 一般解线性方程Ax=b有哪几种做法?你能在Eigen中实现吗? 解: 线性方程组Ax = b的解法 : 1.直接法:(1,2,3,4,5) 2.迭代法:如Jacobi迭代法(6) 其中只有 ...
- Java入门篇(二)——Java语言基础(下)
上篇说到Java中的变量与常量,接下来就是简单的计算了,首先需要了解一下Java中的运算符. 六.运算符 1. 赋值运算符 赋值运算符即"=",是一个二元运算符(即对两个操作数进行 ...
- 在虚拟机中安装metasploit官方攻防模拟器
首先我们要在windwos下载安装perl环境.下载地址: http://pan.baidu.com/s/1i3GLKAp 然后我们安装 点击next 我同意,next next next,然后他会安 ...
- BC#65 T5 ZYB's Prime
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5594 完全不会啊TAT.. 其实官方题解已经说的很清楚了.. #include <cstdio> ...
- Proxy 那点事儿
---恢复内容开始--- 尊重原创:https://my.oschina.net/huangyong/blog/159788 Proxy,也就是"代理"了.意思就是,你不用去做,别 ...