千家信息网

NopCommerce中EntityFramework数据库初试化及数据操作的示例分析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章给大家分享的是有关NopCommerce中EntityFramework数据库初试化及数据操作的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。系统启动时执行
千家信息网最后更新 2026年11月01日NopCommerce中EntityFramework数据库初试化及数据操作的示例分析

这篇文章给大家分享的是有关NopCommerce中EntityFramework数据库初试化及数据操作的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

系统启动时执行任务:IStartupTask,启动时执行的任务主要是数据库的初始化和加载。

IStartupTask调用IEfDataProvider进行数据库的初始化。

IEfDataProvider,SqlCeDataProvider:获取数据连接工厂,不同类型数据库,连接工厂不同。

接口IStartupTask的实体类EfStartUpTask的实现如下:

public class EfStartUpTask : IStartupTask {  public void Execute()  {   var settings = EngineContext.Current.Resolve();   if (settings != null && settings.IsValid())   {    var provider = EngineContext.Current.Resolve();    if (provider == null)     throw new NopException("No EfDataProvider found");    provider.SetDatabaseInitializer();   }  }  public int Order  {   //ensure that this task is run first   get { return -1000; }  } }

SqlCeInitializer,CreateCeDatabaseIfNotExists初始化数据库。

IDbContext,NopObjectContext系统数据库操作上下文。加载所有数据库映射类:EntityTypeConfiguration。代码如下:

protected override void OnModelCreating(DbModelBuilder modelBuilder) {  //dynamically load all configuration  //System.Type configType = typeof(LanguageMap); //any of your configuration classes here  //var typesToRegister = Assembly.GetAssembly(configType).GetTypes()  var typesToRegister = Assembly.GetExecutingAssembly().GetTypes()  .Where(type => !String.IsNullOrEmpty(type.Namespace))  .Where(type => type.BaseType != null && type.BaseType.IsGenericType && type.BaseType.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>));  foreach (var type in typesToRegister)  {  dynamic configurationInstance = Activator.CreateInstance(type);  modelBuilder.Configurations.Add(configurationInstance);  }  //...or do it manually below. For example,  //modelBuilder.Configurations.Add(new LanguageMap());  base.OnModelCreating(modelBuilder); }

此方法是继承自DbContext。并在系统启动时调用,建立数据表与实体的对应关系。

在类型依赖注册类Nop.Web.Framework.DependencyRegistrar中实现数据库工厂的创建、数据库的加载。如下代码:

//data layer var dataSettingsManager = new DataSettingsManager(); var dataProviderSettings = dataSettingsManager.LoadSettings(); builder.Register(c => dataSettingsManager.LoadSettings()).As(); builder.Register(x => new EfDataProviderManager(x.Resolve())).As().InstancePerDependency(); builder.Register(x => (IEfDataProvider)x.Resolve().LoadDataProvider()).As().InstancePerDependency(); builder.Register(x => (IEfDataProvider)x.Resolve().LoadDataProvider()).As().InstancePerDependency(); if (dataProviderSettings != null && dataProviderSettings.IsValid()) {  var efDataProviderManager = new EfDataProviderManager(dataSettingsManager.LoadSettings());  var dataProvider = (IEfDataProvider)efDataProviderManager.LoadDataProvider();  dataProvider.InitConnectionFactory();  builder.Register(c => new NopObjectContext(dataProviderSettings.DataConnectionString)).InstancePerHttpRequest(); } else {  builder.Register(c => new NopObjectContext(dataSettingsManager.LoadSettings().DataConnectionString)).InstancePerHttpRequest(); } builder.RegisterGeneric(typeof(EfRepository<>)).As(typeof(IRepository<>)).InstancePerHttpRequest();

接口IEfDataProvider 的实体类SqlServerDataProvider的数据库初始化方法如下:

///  /// Set database initializer ///  public override void SetDatabaseInitializer() {  //pass some table names to ensure that we have nopCommerce 2.X installed  var tablesToValidate = new[] {"Customer", "Discount", "Order", "Product", "ShoppingCartItem"};  //custom commands (stored proedures, indexes)  var customCommands = new List();  //use webHelper.MapPath instead of HostingEnvironment.MapPath which is not available in unit tests  customCommands.AddRange(ParseCommands(HostingEnvironment.MapPath("~/App_Data/SqlServer.Indexes.sql"), false));  //use webHelper.MapPath instead of HostingEnvironment.MapPath which is not available in unit tests  customCommands.AddRange(ParseCommands(HostingEnvironment.MapPath("~/App_Data/SqlServer.StoredProcedures.sql"), false));   var initializer = new CreateTablesIfNotExist(tablesToValidate, customCommands.ToArray());  Database.SetInitializer(initializer); }

另外,EntityFramework本事是ORM框架,通过数据库访问上下文建立与数据库的连接及实体与数据表的对应广西。并通过创建IRepository的泛型实体类来实现对每一种数据的处理,也就是所谓的Dao层。业务逻辑层通过每种实体的数据访问仓库Repository来进行数据库操作。

感谢各位的阅读!关于"NopCommerce中EntityFramework数据库初试化及数据操作的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

数据 数据库 实体 工厂 系统 示例 分析 不同 上下 上下文 代码 任务 内容 接口 数据表 更多 篇文章 类型 不错 实用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 科技股互联网 科技互联网政务服务 没上市的科技互联网公司 掌上梦互联网科技 人人互联网科技是培训 天速互联网络科技有限公司 温州喔噻互联网科技有限公司 玉溪互联网科技怎么选 深圳市优智互联网科技有限公司 想开互联网科技公司怎么样 用友工业互联网科技发展 小米互联网科技园入驻 伍佰万互联网科技怎么赚钱 中国互联网有什么科技 互联网科技快讯热点 中国科技和美国互联网 现代互联网科技公司 互联网高科技绘画 互联网企业和网络科技有限公司 精品咖啡豆 互联网金融与金融科技 团飞科技与伯堂互联网服务平台 互联网经济与金融科技 宝灵互联网科技有限公司 华夏恒生互联网科技013171 朱啸虎曾投资哪些互联网科技企业 保险科技服务互联网营销体系 中国科技和美国互联网 知域互联网科技有限公司官网
0