日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NopCommerce用.net core重写ef

發布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NopCommerce用.net core重写ef 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? 最近看了NopCommerce源碼,用core學習著寫了一個項目,修改的地方記錄下。項目地址

? NopCommerce框架出來好久了。18年的第一季度 懶加載出來后也會全部移動到.net core。那么就更好玩了。


?

? 項目內容

  • 模仿部分
  • 分層模式
  • 引擎機制
  • DI容器
  • EF
  • 倉儲模式
  • Mapping
  • 部分修改
  • .net core 重寫類庫
  • EFcore mysql 動態加載dbset
  • ? ? ? 當然NopCommerce還包含很多特技:Plugin,Seo,訂閱發布,theme切換等等。這些后期再維護進去。


    ? ?項目介紹

  • 項目分層
  •     

  • 1、Libraries
  •         Nop.Core:【核心層】基礎設施,例:領域對象,倉庫接口,引擎接口,DI管理接口,反射,公共方法。

            Nop.Data:【數據層】EF相關,dbcontext,倉儲實現,mapping

            Nop.Services:【服務層】數據邏輯處理由這層提供。

  • 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 } View Code public SelfDbContext(DbContextOptions options) : base(options){}protected override void OnModelCreating(ModelBuilder modelBuilder){modelBuilder.AddEntityConfigurationsFromAssembly(GetType().Assembly);base.OnModelCreating(modelBuilder);} View Code 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 } View Code 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 } View Code 1 public interface ISelfEntityMappingConfiguration 2 { 3 void Map(ModelBuilder b); 4 } View Code 1 public class Student:BaseEntity 2 { 3 public string Name { get; set; } 4 5 public string Class { get; set; } 6 } View Code

          解釋:

  • DataBaseStartup是繼承Startup的數據中間件處理類。這里去選擇數據庫類型和dbcontext,以及數據庫初始化。Nopcommerce原先是在install那層判斷是否存在數據庫json處理數據庫初始化,這里簡單化了,初始化可以抽象出來再處理。這個類的實現是在web.framwork層。解耦了核心與web層的。這里完全可以自己再重寫一個處理類,用來切換數據庫等其他操作。
  • SelfDbContext是數據處理上下文類。以前寫的dbcontext處理新增的實體類dbset都是一個一個屬性添加,這里是通過反射進行動態加載。相關的方法寫在了modelbuilder的擴展方法里面
  • ModelBuilderExtenions是modelbuilder的構建擴展方法的類。里面介紹如何通過反射查找如要map進入的實體map對象。主要通過對比類型繼承的接口對象type
  • ISelfEntityMappingConfiguration是所有map對象的上層接口,通過這個類的類別判斷實體加入到dbcontext
  • StudentMapping和student類是這里舉例的例子。Mapping可以對數據字段進行處理。當然也可以直接在實體類加上attribute。
  •     3.項目繼承nopcommerce的其他地方

  • 引擎構建。項目中也構建了EngineContext和IEngine。引擎是整個項目啟動的處理核心,處理的東西不再復述。發現構建了這個之后 可以切換orm框架了。對于一些大型需要對接第三方同步orm,那么這個構建出來之后就非常好處理了。當然好處的地方還有更多。
  • 倉儲模式。這里其實是偽倉儲,封裝多出一個倉庫管理員,并沒有事務聚合根等做法。
  • DI選擇auotofac。
  • ??

    轉載于:https://www.cnblogs.com/TeemoHQ/p/8343731.html

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的NopCommerce用.net core重写ef的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。