.NET 工程 基础知识----Repository 工程建立

对于.net 项目, 大部分会选择使用Reposiotry的方式来设计数据层,这里只是介绍一些很基础的设计。

第一步,建立工程,使用Vs2019建立一个 ASP.NET core web application 工程。这里新的web工程先不做任何动作,之后会进行一些改动。

第二步,在解决方案中建立一个Class Library(.net Core),我的取名是“工程名.Entities”,然后需要在Nuget中安装 Microsoft.EntityFrameworkCore。接下来,创建名为“Models” 的文件夹,这个文件中所存放的是类文件,类文件的数量和数据库中表的数量一致,并且字段也和数据库中的一样。然后在根目录下创建一个“RepositoryContext.cs”的文件。这个文件继承DBcontext类(该类在Microsoft.EntityFrameworkCore中)。 在构造函数中键入 DbContextOptions 类型的参数,然后使用 ":base(DbContextOptions类型参数)"。创建DbSet<类文件夹中每个类名>的变量(public), 例如:public DbSet<User> Users{get; set;},这里建议将变量名使用复数。

第三步,返回第一步中建立的web application 工程。 在 appsettings.json中加入节点 “sqlconnection”:{"connectionString": "链接字符串"}。这里“sqlconnection” and "connectionString" 可以自定义名字,我写这两个只是个人习惯。然后建立一个名为“Extension”的文件夹,并且建立一个“ServiceExtension”类 注:static 类。紧接着在这个类中创建一个 “ConfigureSQLContext” 方法,包含“this IServiceCollection” 和 “IConfiguration” 两个类型的参数。这两个参数类型需要导入:Microsoft.Extensions.Configuration 和 Microsoft.Extensions.DependencyInjection。在方法中键入 services.AddDbContext<RepositoryContext>(o => o.UseSqlServer(config["sqlconnection:connectionString"])); 这里 “UseSqlServer”需要引入Microsoft.EntityFrameworkCore。完成这些步骤后,打开“Startup”文件,找到“ConfigureServices” 方法这里需要加载工程需要所有的service。所以刚才创建的“ConfigureSQLContext”也需要加载进去。在这里 已经有一个名为“services” 的参数,你可以使用“services”加“.” 找到刚才创建的方法。如果没有,然后ServiceExtension,检查类和方法是否为static,然后 IServiceCollection 类型参数前是否加“this”。如果上述都已经检查无误。就可以通过services加“.”找到该方法。然后将 Configuration 传入ConfigureSQLContext方法中。 完成后的应为是:“ services.ConfigureSQLContext(Configuration)”;

第四步,创建另一个Class Library(.net Core) 工程 名为“工程名.Abstract”这里存放所有的接口。引用之前创建的 “Entities” 的工程。然后创建一个接口“IRepositoryBase”  泛类型接口。

我创建的代码如下:

public interface IRepositoryBase<T>
    {
        void Created(T entity);
        IQueryable<T> ReadAll();
        IQueryable<T> ReadByFilter(Expression<Func<T, bool>> expression);
        void Update(T entity);
        void Delete(T entity);
    }

第五步,创建新的Class Library(.net Core) 工程 名为“工程名.Repository”,引用“abstract 和 entities” 两个工程。然后创建一个名为 RepositoryBase的抽象类。实现“IRepositoryBase”接口,并且在构造函数中加入“RepositoryContext”(在第二步中创建的类)类型的参数。

代码如下:

public abstract class RepositoryBase<T> : IRepositoryBase<T> where T : class
    {
        private readonly RepositoryContext _repositoryContext;

        public RepositoryBase(RepositoryContext repositoryContext)
        {
            _repositoryContext = repositoryContext;
        }

        public void Created(T entity)
        {
            _repositoryContext.Set<T>().Add(entity);            
        }

        public IQueryable<T> ReadAll()
        {
            return _repositoryContext.Set<T>().AsNoTracking();
        }

        public IQueryable<T> ReadByFilter(Expression<Func<T, bool>> expression)
        {
            return _repositoryContext.Set<T>().Where(expression).AsNoTracking();
        }

        public void Update(T entity)
        {
            _repositoryContext.Set<T>().Update(entity);
        }
        public void Delete(T entity)
        {
            _repositoryContext.Set<T>().Remove(entity);
        }
    }

至此,最最基本的Repository 结构就完成。下次我会介绍如果使用它。

在这里有一个小建议:就是在创建  IRepositoryBase 和 实现接口的RepositoryBase 中方法的顺序尽量 遵循 'CRUD' 即 Create, Read, Update 和 Delete的顺序。然后类里的顺序是:私有变量,构造函数,共有变量,私有方法,共有方法的顺序去排列,这个是个人的习惯。

原文地址:https://www.cnblogs.com/Weimin496/p/12371247.html