You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
abp/docs/zh-Hans/Entity-Framework-Core.md

2.5 KiB

Entity Framework Core 集成

本文介绍了如何将EF Core作为ORM提供程序集成到基于ABP的应用程序以及如何对其进行配置.

安装

Volo.Abp.EntityFrameworkCore 是EF Core 集成的主要nuget包. 将其安装到你的项目中(在分层应用程序中适用于 数据/基础设施层):

Install-Package Volo.Abp.EntityFrameworkCore

然后添加 AbpEntityFrameworkCoreModule 模块依赖项到 module(项目中的Mudole类):

using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Modularity;

namespace MyCompany.MyProject
{
    [DependsOn(typeof(AbpEntityFrameworkCoreModule))]
    public class MyModule : AbpModule
    {
        //...
    }
}

创建 DbContext

你可以平常一样创建DbContext,它需要继承自 AbpDbContext<T>. 如下所示:

using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;

namespace MyCompany.MyProject
{
    public class MyDbContext : AbpDbContext<MyDbContext>
    {
        //...your DbSet properties

        public MyDbContext(DbContextOptions<MyDbContext> options)
            : base(options)
        {
        }
    }
}

将DbContext注册到依赖注入

在module中的ConfigureServices方法使用 AddAbpDbContext依赖注入系统注册DbContext类.

using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Modularity;

namespace MyCompany.MyProject
{
    [DependsOn(typeof(AbpEntityFrameworkCoreModule))]
    public class MyModule : AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            context.Services.AddAbpDbContext<MyDbContext>();

            //...
        }
    }
}

添加默认仓储

ABP会自动为DbContext中的实体创建仓储 (TODO: link). 需要在注册的时使用AddDefaultRepositories():

services.AddAbpDbContext<MyDbContext>(options =>
{
    options.AddDefaultRepositories();
});

默认情况下为每个聚合根实体(从聚合体派生的类)创建一个仓储. 如果想要为其他实体也创建仓储 需要把includeAllEntities 设置为 true:

services.AddAbpDbContext<MyDbContext>(options =>
{
    options.AddDefaultRepositories(includeAllEntities: true);
});

然后你就可以在服务中注入和使用 IRepository<TEntity>IQueryableRepository<TEntity>.

添加自定义仓储

TODO ...

为默认仓储设置Base DbContext类或接口

TODO ...

替换其他仓储

TODO ...