-
Notifications
You must be signed in to change notification settings - Fork 7
通过下面的操作步骤,您将建立一个小小的MiCake
演示程序。
- .NET Core SDK 3.0 +
- 带有ASP.NET和Web开发的
Visual Studio 2019
或者Visual Studio Code
- MariaDb(下载地址) [您可以根据您的个人偏好选择数据库,比如SqlServer、SqlLite等。这将决定您后面使用何种EFCore数据链接包]
1.新建项目
- 从 Visual Studio “文件” 菜单中选择“新建” >“项目” 。
- 选择“ASP.NET Core Web 应用程序” 。
- 将该项目命名为 MiCakeDemo 。
2.配置
- 在
Visual Studio
中选择“工具”>“NuGet 包管理器”>“包管理器控制台” - 执行以下包安装指令:
Install-Package Pomelo.EntityFrameworkCore.MySql
Install-Package Microsoft.EntityFrameworkCore.Tools
Install-Package MiCake.AspNetCore.Start
- 新增一个叫做MyEntryModule.cs的文件,该类的作用是告诉MiCake该从哪个程序集启动:
public class MyEntryModule : MiCakeModule
{
}
- 在项目文件夹中,使用以下代码创建 MyDbContext.cs
public class MyDbContext : MiCakeDbContext
{
public MyDbContext(DbContextOptions options) : base(options)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// this line is very import.
base.OnModelCreating(modelBuilder);
}
}
到目前为止,您会发现这和您建立一个普通的EFCore
应用没有一点区别。是的,以上操作对于经常使用EFCore
的朋友将感到非常熟悉。
- 在项目文件夹中,使用以下代码创建 Book.cs
public class Book : AggregateRoot<Guid>
{
public string Name { get; private set; }
public string Author { get; private set; }
public Book()
{
Id = Guid.NewGuid();
}
public Book(string name, string author) : this()
{
CheckValue.NotNull(name, nameof(name));
CheckValue.NotNull(author, nameof(author));
Name = name;
Author = author;
}
public void ChangeName(string name)
{
CheckValue.NotNullOrEmpty(name, nameof(name));
Name = name;
}
}
- 在MyDbContext.cs添加如下代码:
public class MyDbContext : MiCakeDbContext
{
//Add this line
public DbSet<Book> Books { get; set; }
…………
}
- 在Startup.cs添加如下代码:
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
//添加该代码 用于配置EFCore
services.AddDbContext<BaseAppDbContext>(options =>
{
options.UseMySql("Server=localhost;Database=micakeexample;User=root;Password=a12345;", mySqlOptions => mySqlOptions
.ServerVersion(new ServerVersion(new Version(10, 5, 0), ServerType.MariaDb)));
});
//添加该代码 用于配置MiCake
services.AddMiCakeWithDefault<MyDbContext, MyEntryModule>()
.Build();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
//添加该代码 用于启动MiCake
app.StartMiCake();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
- 在Controller文件夹中创建一个Controller,名为BookController.cs:
[ApiController]
[Route("[controller]/[action]")]
public class BookController : ControllerBase
{
private readonly IRepository<Book, Guid> _bookRepository;
public BookController(IRepository<Book, Guid> bookRepository)
{
_bookRepository = bookRepository;
}
[HttpPost]
public async Task AddBookAsync(string name, string author)
{
await _bookRepository.AddAsync(new Book(name, author));
}
[HttpPost]
public async Task DeleteBookAsync(Guid bookId)
{
var currentBook = await _bookRepository.FindAsync(bookId);
await _bookRepository.DeleteAsync(currentBook);
}
[HttpPost]
public async Task ChangeBookNameAsync(Guid bookId,string bookName)
{
var currentBook = await _bookRepository.FindAsync(bookId);
currentBook.ChangeName(bookName);
await _bookRepository.UpdateAsync(currentBook);
}
}
到目前为止您已经完成了该演示项目:关于Book的简单增删改查。接下来,运行起来吧!
- 进行数据库迁移(假如您选择使用了MariaDb,您可以先使用安装包中自带的数据库管理工具
HeidiSQL
来建立默认数据库,名为micakeexample
)。在Visual Studio
中选择“工具”>“NuGet 包管理器”>“包管理器控制台”,运行:
dotnet ef migrations add AddBookEntity
- 完成后继续执行如下命令:
dotnet ef database update
迁移完成后,您就可以通过F5
运行该AspNet Core项目。
为了更直观的看到上面已经建立的API服务,可以引入Swagger来查看。
- 在
Visual Studio
中选择“工具”>“NuGet 包管理器”>“包管理器控制台”,运行:
Install-Package NSwag.AspNetCore
- 调整Startup.cs文件
public void ConfigureServices(IServiceCollection services)
{
………………
//Add Swagger
services.AddSwaggerDocument(document => document.DocumentName = "MiCake Demo Application");
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
…………
//Add Swagger
app.UseOpenApi();
app.UseSwaggerUi3();
}
MiCake.Samples 是MiCake的示例项目仓库,在这里面可能会有对您有帮助的示例代码片段。您可以跳转至该仓库进行查阅。
通过本次小案例,您已经学会了MiCake
的基础使用。对于曾经使用过EFCore
的同学,将感到非常的简单,几乎没有任何的学习成本。
该案例中,我们建立一个叫做“Book”的聚合根,然后将“修改书名”这个行为赋予了该聚合根(ChangeName
方法)。这是一个很小很小的Demo,但是在不知不觉中您已经接触到一些了“领域驱动设计(DDD)”的知识:专注于领域对象的构建,并将行为职责划分给对应的对象。随着项目业务的不断复杂和代码量的增多,您将逐渐感受到该特性带来的益处。
可能您已经注意到,上面的案例除了一些基础环境的配置以外,开发重心一直都在“核心”的地方:“Book”,它是我们业务的主要体现,随后我们通过“Book”的仓储(Repository)来完成对外的操作。随着业务的明确和增长需要添加新功能时,只需要按照同样的步骤添加“领域对象”即可,我们始终将重心放在“领域层”中,其它的大部分交互都将由MiCake
来完成。
在后期的使用中,建议您先了解有关“领域驱动设计(DDD)”方面的概念知识(该方面知识您可以参考《如何运用领域驱动设计系列文章》 或者阅读Eric Evans所编著的《领域驱动设计》)。