NopCommerce用core重写ef

最近看了NopCommerce源码,用core学习着写了一个项目,修改的地方记录下。项目地址

NopCommerce框架出来好久了。18年的第一季度 懒加载出来后也会全部移动到.net core。那么就更好玩了。



  项目内容

  1. 模仿部分

    1. 分层模式
    2. 引擎机制
    3. DI容器
    4. EF
    5. 仓储模式
    6. Mapping
  2. 部分修改
    1. .net core 重写类库
    2. EFcore mysql 动态加载dbset

当然NopCommerce还包含很多特技:Plugin,Seo,订阅发布,theme切换等等。这些后期再维护进去。



项目介绍

  1. 项目分层

    

    1. 1、Libraries

        Nop.Core:【核心层】基础设施,例:领域对象,仓库接口,引擎接口,DI管理接口,反射,公共方法。

        Nop.Data:【数据层】EF相关,dbcontext,仓储实现,mapping

        Nop.Services:【服务层】数据逻辑处理由这层提供。

    1. 2、Presentation

        Nop.Web:【页面层】展示界面。

        Nop.Web.Framework:【页面基础层】web层的上层封装。例如启动项的实现,DI实现。

详细的分层思想和细节这里不再复述。

    2.项目修改点

  EF6转换到EFCore,数据库选择mysql,动态加载dbset 看了相关代码,在进行解释    

 1     public class DataBaseStartup: ISelfStartup
 2     {
 3
 4         public void ConfigureServices(IServiceCollection services, IConfigurationRoot configuration)
 5         {
 6             services.AddDbContext<SelfDbContext>(x => x.UseMySql(configuration.GetConnectionString("MySql")));
 7         }
 8
 9         public void Configure(IApplicationBuilder application)
10         {
11             var dbContext=EngineContext.Current.ServiceProvider.GetService<SelfDbContext>();
12             dbContext.Database.EnsureCreated();
13         }
14
15         public int Order { get; } = 1;
16     }

    public SelfDbContext(DbContextOptions options) : base(options)
        {

        }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.AddEntityConfigurationsFromAssembly(GetType().Assembly);
            base.OnModelCreating(modelBuilder);
        }

 1     public static class ModelBuilderExtenions
 2     {
 3         private static IEnumerable<Type> GetMappingTypes(this Assembly assembly, Type mappingInterface)
 4         {
 5             return assembly.GetTypes().Where(x => !x.IsAbstract && !x.IsGenericType && !x.IsInterface && x.GetInterfaces().Any(y => y == mappingInterface));
 6         }
 7
 8         public static void AddEntityConfigurationsFromAssembly(this ModelBuilder modelBuilder, Assembly assembly)
 9         {
10             var mappingTypes = assembly.GetMappingTypes(typeof(ISelfEntityMappingConfiguration));
11             foreach (var config in mappingTypes.Select(Activator.CreateInstance).Cast<ISelfEntityMappingConfiguration>())
12             {
13                 config.Map(modelBuilder);
14             }
15         }
16     }

 1     public  class StudentMapping : ISelfEntityMappingConfiguration
 2     {
 3         public void Map(ModelBuilder b)
 4         {
 5             b.Entity<Student>().ToTable("Student")
 6                 .HasKey(p => p.Id);
 7
 8             b.Entity<Student>().Property(p => p.Class).HasMaxLength(50).IsRequired();
 9             b.Entity<Student>().Property(p => p.Name).HasMaxLength(50);
10         }
11     }

1     public interface ISelfEntityMappingConfiguration
2     {
3         void Map(ModelBuilder b);
4     }

1     public class Student:BaseEntity
2     {
3         public string Name { get; set; }
4
5         public string Class { get; set; }
6     }

      解释:

    1. DataBaseStartup是继承Startup的数据中间件处理类。这里去选择数据库类型和dbcontext,以及数据库初始化。Nopcommerce原先是在install那层判断是否存在数据库json处理数据库初始化,这里简单化了,初始化可以抽象出来再处理。这个类的实现是在web.framwork层。解耦了核心与web层的。这里完全可以自己再重写一个处理类,用来切换数据库等其他操作。
    2. SelfDbContext是数据处理上下文类。以前写的dbcontext处理新增的实体类dbset都是一个一个属性添加,这里是通过反射进行动态加载。相关的方法写在了modelbuilder的扩展方法里面
    3. ModelBuilderExtenions是modelbuilder的构建扩展方法的类。里面介绍如何通过反射查找如要map进入的实体map对象。主要通过对比类型继承的接口对象type
    4. ISelfEntityMappingConfiguration是所有map对象的上层接口,通过这个类的类别判断实体加入到dbcontext
    5. StudentMapping和student类是这里举例的例子。Mapping可以对数据字段进行处理。当然也可以直接在实体类加上attribute。

    3.项目继承nopcommerce的其他地方

    1. 引擎构建。项目中也构建了EngineContext和IEngine。引擎是整个项目启动的处理核心,处理的东西不再复述。发现构建了这个之后 可以切换orm框架了。对于一些大型需要对接第三方同步orm,那么这个构建出来之后就非常好处理了。当然好处的地方还有更多。
    2. 仓储模式。这里其实是伪仓储,封装多出一个仓库管理员,并没有事务聚合根等做法。
    3. DI选择auotofac。

原文地址:https://www.cnblogs.com/TeemoHQ/p/8343731.html

时间: 2024-10-17 00:43:53

NopCommerce用core重写ef的相关文章

(3).Net Core的EF Core的使用

EF Core(Entity Framework Core)是 EF 的.net core 版本.EF Core 对 SQLServer 支持很好,也可以在Linux下连接SQLServer.不过如果在Linux下首选MySQL,因此这次试一试MYSQL. EFCore 的 Nuget: Microsoft.EntityFrameworkCore(一般不需要单独安装,安装mysql的包的时候会把相关依赖的包自动下载下来). 官 方 的 mysql  ef  provider经网上查资料网友告知还

net Core 通过 Ef Core 访问、管理Mysql

net Core 通过 Ef Core 访问.管理Mysql 本文地址:http://www.cnblogs.com/likeli/p/5910524.html 环境 dotnet Core版本:1.0.0-preview2-003131 本文分为Window环境和Mac Os X环境. 相关资源下载 Visual Studio Code:https://code.visualstudio.com DotNet Core:https://dotnet.github.io/ MySql.Data.

ASP.NET Core重写个人博客站点小结

今天用ASP.NET Core重写了个人博客站点,原来是基于ASP.NET 4.5开发的.重写工作总体很顺利,最后成功发布到Ubunt+Nginx平台上.效果如下: 右边的Header信息里可以看到已经是Nginx(Ubuntu)了,虽然最后成功发布了,但是过程中遇到点坑,特来分享. HtmlHelper问题 ASP.NET Core之前,大家都很熟悉HtmlHelper方法.但是到了ASP.NET Core后,一些方法已经不能使用了,取而代之的是全新的TagHelper.但今天我遇到的问题是@

[.NET Core] - 使用 EF Core 的 Scaffold-DbContext 脚手架命令创建 DbContext

Scaffold-DbContext 命令 参数 Scaffold-DbContext [-Connection] <String> [-Provider] <String> [-OutputDirectory <String>] [-ContextClassName <String>] [-Tables <String>] [-DataAnnotations] [-Project <String>] [<CommonParam

ASP.NET Core 配置 EF 框架服务 - ASP.NET Core 基础教程 - 简单教程,简单编程

原文:ASP.NET Core 配置 EF 框架服务 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 EF 框架服务 上一章节中我们了解了 Entity Framework 的基本工作原理和 DbContext ,我们也创建了一个自己的 HelloWorldDBContext. 本章节我们就来讲讲如何设置我们的 EF 框架来链接到 SQLite 数据库 配置 EF 框架服务 要让我们的 EF 框架的 DBContext 能够运行起来,我们需要更改一

ASP.NET Core 使用 EF 框架查询数据 - ASP.NET Core 基础教程 - 简单教程,简单编程

原文:ASP.NET Core 使用 EF 框架查询数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 使用 EF 框架查询数据 上一章节我们学习了如何设置和初始化数据库,以及如何创建迁移代码和应用迁移代码.本章节我们就学习如何使用 EF 框架来查询数据库,至于添加和修改,后面的章节中我们会慢慢学习到 添加测试数据 我们首先使用 SQLite Studio 添加三条数据 ID Name 1 李白 2 杜甫 3 白居易 使用 SQLite Studio

ASP.NET Core 配置 EF SQLite 支持 - ASP.NET Core 基础教程 - 简单教程,简单编程

原文:ASP.NET Core 配置 EF SQLite 支持 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 EF SQLite 支持 上一章节我有提到 macOS 版的 Visual Studio Community 没有携带 LocalDB,也就是说 LocalDB 暂时不支持 macOS 系统 虽然我可以在 Windows 上继续完成接下来的教程,但我觉得还是感觉不妥,如果其它使用苹果笔记本的人要去哪里找 Windows 的电脑 我临时改变

.net core webapi+EF Core

.net core webapi+EF Core 一.描述: EF Core必须下载.net core2.0版本 Micorsoft.EntityFrameworkCore:EF框架的核心包Micorsoft.EntityFrameworkCore.SqlServer:针对SqlServer数据库的扩展,使用SqlServer数据库必须.类似的还有MySql,SqlLite等Micorsoft.EntityFrameworkCore.ToolsMicorosft.EntityFrameworkC

.net core 使用 ef core

第一步: 创建一个.net core console app. 第二步:安装EFCore package 和  design(以前vs是有EF项目模板的,core版本现在没有,所有安装这个工具来创建ModelsType Context等). 工具-->Nuget包管理器-->程序包管理控制台 1.Install-package microsoft.entityframeworkcore.sqlserver 2.Install-package microsoft.entityframeworkc