教程:MongoDB 与 C# 的简单方法!
本文的目的是让您熟悉一种替代方式,与您通常在此类教程中看到的相比,在 MongoDB 服务器中存储和检索数据的方式更简洁且方便。希望在本文结束时,您会看到曙光并决定放弃 SQL Server 和实体框架并加入 mongo 列车。
安装MongoDB服务器
如果您的机器上还没有运行 mongodb 服务器,请在继续之前按照下面的教程进行操作。
[

](/djnitehawk)[
如何在 Windows 和 Linux 上安装 MongoDB 服务器
Dĵ NiGXILPSK ・ 2019 年 12 月 30 日 ・ 3 分钟阅读
#nosql #mongodb #database #tutorial
](/djnitehawk/how-to-install-mongodb-server-on-windows-linux-4in)
脚手架一个控制台应用程序项目
使用针对.net core的 Visual Studio 创建一个新的控制台应用程序项目,或在 powershell/cmd 窗口中输入以下内容:
dotnet new console -n LearnMongo
start .\LearnMongo\LearnMongo.csproj
进入全屏模式 退出全屏模式
安装依赖
打开包管理器控制台并输入以下内容:
提示:tools > nuget package manager > package manager console
Install-Package MongoDB.Entities
进入全屏模式 退出全屏模式
初始化数据库连接
打开Program.cs文件并使其如下所示:
using MongoDB.Entities;
using System.Threading.Tasks;
namespace LearnMongo
{
static class Program
{
private async static Task Main()
{
await DB.InitAsync("MyDatabase", "localhost", 27017);
}
}
}
进入全屏模式 退出全屏模式
我们指定此应用程序应将我们的数据存储在名为MyDatabase的数据库中,该数据库位于运行在localhost上并侦听默认端口的 mongodb 服务器中。
保存实体
将一个名为Person.cs的新类文件添加到项目中,并使其如下所示:
using MongoDB.Entities;
using System;
namespace LearnMongo
{
public class Person : Entity
{
public string Name { get; set; }
public DateTime DateOfBirth { get; set; }
public int SiblingCount { get; set; }
}
}
进入全屏模式 退出全屏模式
你想要持久化到 mongodb 的 main/root 实体必须从我们之前安装的包提供的类Entity继承。
然后回到Program.cs文件并在 db 初始化行下面添加以下内容:
var lisa = new Person
{
Name = "Lisa Malfrey",
DateOfBirth = new DateTime(1983, 10, 11),
SiblingCount = 1
};
await lisa.SaveAsync();
Console.WriteLine($"Lisa's ID: {lisa.ID}");
Console.Read();
进入全屏模式 退出全屏模式
现在点击ctrl+f5运行程序。您将看到实体已保存并自动分配了一个 ID。
注意:ID 属性来自基类Entity,因此我们不必继续手动将其添加到我们创建的每个实体中。
如果您使用 db manager 或 mongo shell 查看数据库内部,您会看到创建了一个名为Person的集合并添加了一条新记录,如下所示:
{
"_id": ObjectId("5e0c682ddd3765736cb8ca56"),
"Name": "Lisa Malfrey",
"DateOfBirth": ISODate("1983-10-10T18:30:00Z"),
"SiblingCount": 1
}
进入全屏模式 退出全屏模式
检索实体
可以通过几种不同的方式检索数据。这里有一些例子:
按ID查找
var result = await DB.Find<Person>().OneAsync(lisa.ID);
Console.WriteLine($"Found Person: {result.Name}");
Console.Read();
进入全屏模式 退出全屏模式
按兄弟姐妹计数查找
var result = (await DB.Find<Person>()
.ManyAsync(p => p.SiblingCount >= 1))
.First();
Console.WriteLine($"Count: {result.SiblingCount}");
Console.Read();
进入全屏模式 退出全屏模式
在这里,我们说找到许多Person个实体,它们至少有 1 个兄弟姐妹。.First()linq 方法只是从找到的列表中选择第一个人。
按日期范围查找
var result = await DB.Queryable<Person>()
.Where(p => p.DateOfBirth > new DateTime(1983, 10, 10) &&
p.DateOfBirth < new DateTime(1983, 10, 12))
.FirstOrDefaultAsync();
Console.WriteLine($"Birthday: {result.DateOfBirth.ToLocalTime()}");
Console.Read();
进入全屏模式 退出全屏模式
这里我们使用IQueryable接口来检索出生日期在两个日期范围内的第一个人。
更新实体
您可以检索完整的实体,更新其属性并将其保存回数据库,或者更新实体的某些属性而无需先检索它们。
通过检索完整实体进行更新
var person = await DB.Find<Person>().OneAsync(lisa.ID);
person.Name = "Lisa Kudrow";
person.SiblingCount = 2;
await person.SaveAsync();
进入全屏模式 退出全屏模式
更新属性而不检索
await DB.Update<Person>()
.Match(p => p.ID == lisa.ID)
.Modify(p => p.Name, "Lisa Kudrow")
.Modify(p => p.SiblingCount, 2)
.ExecuteAsync();
进入全屏模式 退出全屏模式
下一步...
希望上面的代码能激起您的兴趣,让您更深入地学习如何以简单的方式将 mongodb 与 c# 一起使用。包MongoDB.Entities使得与 mongodb 服务器通信变得非常容易。它的 api 的各个方面都记录在官方网站上。你也可以在 github 上查看源代码:
dj-nitehawk/[MongoDB.Entities
用于 MongoDB 的数据访问库,具有优雅的 api、LINQ 支持和内置实体关系管理
[
](https://dev.azure.com/RyanGunner/ MongoDB%20Entities/_build/latest?definitionIdu003d4)
MongoDB.实体
一个轻量级的 .net 标准库,几乎没有任何开销,旨在通过抽象官方驱动程序来简化对 mongodb 的访问,同时在其之上添加有用的功能,从而产生优雅的 API 表面,生成美观、人性化的数据访问代码。
更多信息:
详细文档请访问官网:
https://mongodb-entities.com
在 GitHub 上查看
更多推荐
所有评论(0)