MongoDB.实体
轻量级的 .net 标准库,几乎没有任何开销,旨在通过抽象官方驱动程序来简化对 mongodb 的访问,同时在其上添加有用的功能,从而形成一个优雅的 API 界面,产生美观、人性化的数据访问代码。
更多信息:
请访问官方网站获取详细文档:
本文的目的是让您熟悉一种替代的、不太冗长且方便的方法来在 MongoDB 服务器中存储和检索数据,与您通常在这些教程中看到的方法相比。希望在本文结束时,您能看到曙光并决定放弃 SQL Server 和实体框架并加入 mongo 列车。
如果您的机器上尚未运行 mongodb 服务器,请先按照以下教程进行操作。
使用 Visual Studio Targetting 创建一个新的控制台应用程序项目.net core
或在 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
mongodb 的数据库中,该数据库在localhost
默认端口上监听运行。
添加一个名为的新类文件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 的主/根实体必须从Entity
我们之前安装的包提供的类继承。
然后返回Program.cs
文件并在数据库初始化行下面添加以下内容:
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
类,因此我们不必继续手动将其添加到我们创建的每个实体中。
如果您使用数据库管理器或 mongo shell 查看数据库内部,您将看到Person
创建了一个名为的集合,并添加了一条新记录,如下所示:
{
"_id": ObjectId("5e0c682ddd3765736cb8ca56"),
"Name": "Lisa Malfrey",
"DateOfBirth": ISODate("1983-10-10T18:30:00Z"),
"SiblingCount": 1
}
数据可以通过几种不同的方式检索。以下是一些示例:
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 个兄弟的实体。linq.First()
方法只是从找到的列表中选择第一个人。
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();
希望以上代码能够激发您的兴趣,让您更深入地学习如何轻松地通过 C# 使用 MongoDB。该软件包MongoDB.Entities
让您能够非常轻松地与 MongoDB 服务器通信。其 API 的各个方面均已在官方网站上记录。您也可以在 GitHub 上查看源代码:
轻量级的 .net 标准库,几乎没有任何开销,旨在通过抽象官方驱动程序来简化对 mongodb 的访问,同时在其上添加有用的功能,从而形成一个优雅的 API 界面,产生美观、人性化的数据访问代码。
请访问官方网站获取详细文档: