NopCommerce 是一个国外的开源电商系统。3.80版本使用EF6.0 和.Net Framework 4.5.1

并引入了Autofac , Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级 性能上非常高。

关于 Autofac 可以参考
原油
的文章
http://www.cnblogs.com/jys509/p/4649798.html

本系列文章要用于记录研究笔记,废话不多可以当参考文档看看。

下面将会以 项目名称\主要文件夹名称的格式介绍二次开发主要涉及的内容、而非插件开发

插件开发可参考官方文档,也有类似的内容 :Plugin with data access

 
 

解决方案结构:

  1. Nop.Core\Domain\

    此文件夹主要存放Code First的数据库实体对象

    字段对应数据库,Id 属性继承自BaseEntity 无需再写

    如下代码:

    using System;

    using Nop.Core.Domain.Customers;

    namespace Nop.Core.Domain.Blogs

    {

    ///

    /// Represents a blog comment

    ///

    public
    partial
    class BlogComment : BaseEntity

    {

    public
    int CustomerId { get; set; }

    public
    string CommentText { get; set; }

  2. Nop.Data\ Mapping

    文件夹中的类型主要描述 Nop.Core\Domain\ 文件夹中的对象对于数据库表的映射关系与约束

    public
    partial
    class CountryMap : NopEntityTypeConfiguration<Country>

    {

    public CountryMap()

    {

    this.ToTable("Country"); //数据库表名称

    this.HasKey(c =>c.Id);//主键 如果自己新增的数据表则必须设置为自增长

         //经测试如下代码对于后期建立的表无效

    //this.Property(o => o.Id).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);

    this.Property(c => c.Name).IsRequired().HasMaxLength(100);

    this.Property(c =>c.TwoLetterIsoCode).HasMaxLength(2);

    this.Property(c =>c.ThreeLetterIsoCode).HasMaxLength(3);

    }

    }

    框架不会使ID自动增长然后插入,必须手动设置数据库表字段属性为自动增长,在执行Insert语句之后框架会自动查询已插入的ID 值

    如在SQL Server 中这个SQL语句可以在执行完插入动作后自动返回已增长的ID值:

    Insert
    into
    Table xxx;Select
    @@Identity

 
 

  1. Nop.Services\

    主要定义数据操作和业务逻辑

    基本上每个操作类都有一个对应的接口,如果需要新增自己的业务对象则应该参照如下步骤:

  • 定义你的操作类
  • 从操作类中提取接口
  • 指定注入类型

如:下图中 IRepository<Customer>
_customerRepository 表示数据仓库的操作对象,

IGenericAttributeService _genericAttributeService;
这个类型类似于CustomerService的定义,也是有一个接口和一个实现类

它们都将在Nop.Web.Framework.DependencyRegistrar.Register(ContainerBuilder builder, ITypeFinder typeFinder, NopConfig config)
方法中定义如何自动注入

 
 

 
 

  

NopCommerce 3.80框架研究(一) 数据访问与持久化的更多相关文章

  1. NopCommerce 3.80框架研究(二) MVC 表示层与数据验证

    表示层框架结构 /Views/Shared/_Root.Head.cshtml /Views/Shared/_Root.cshtml /Views/Shared/_ColumnsOne.cshtml ...

  2. NopCommerce 3.80框架研究(三)替换tinymce 为KindEditor

    NopCommerce 自带的编辑器tinymce 功能不是很全.所以尝试将其替换为功能更强大的 KindEditor 并替实现文件上传和在线浏览功能 首先下载 并解压到如下位置 请注意这里是部署在N ...

  3. SpringBoot详细研究-02数据访问

    Springboot对数据访问部分提供了非常强大的集成,支持mysql,oracle等传统数据库的同时,也支持Redis,MongoDB等非关系型数据库,极大的简化了DAO的代码,尤其是Spring ...

  4. MyBatis框架的XML数据访问Dao层接口的组合使用

    MyBatis 的前生为Apache的开源项目iBatis.其优势在于灵活,几乎可以替代JDBC,同时提供了编程接口.目前MyBatis的数据访问Dao层不需要实现类,也不需要像JDBC那样拼接Hql ...

  5. SpringBoot之旅第五篇-数据访问

    一.引言 大部分系统都离不开数据访问,数据库包括SQL和NOSQL,SQL是指关系型数据库,常见的有SQL Server,Oracle,MySQL(开源),NOSQL是泛指非关系型数据库,常见的有Mo ...

  6. springboot 数据访问【转】【补】

    六.SpringBoot与数据访问 1.JDBC pom.xml配置 <dependencies> <dependency> <groupId>org.spring ...

  7. 项目架构开发:数据访问层之Cache

    数据访问层简单介绍 数据访问层,提供整个项目的数据访问与持久化功能.在分层系统中所有有关数据访问.检索.持久化的任务,最终都将在这一层完成. 来看一个比较经典的数据访问层结构图 大概可以看出如下信息 ...

  8. 分享自己的超轻量级高性能ORM数据访问框架Deft

    Deft 简介 Deft是一个超轻量级高性能O/R mapping数据访问框架,简单易用,几分钟即可上手. Deft包含如下但不限于此的特点: 1.按照Transact-SQL的语法语义风格来设计,只 ...

  9. 解析大型.NET ERP系统数据访问 对象关系映射框架LLBL Gen Pro

    LLBL Gen Pro是一个为.NET开发人员设计的的对象关系映射(ORM)框架,与NHibernate,Entity Framework等框架一样,通过实体与数据表的映射,实现关系数据库持久化. ...

随机推荐

  1. TextBox(只允许输入字母或者数字)

    实现如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System ...

  2. idea系列新版注册模式

    http://idea.qinxi1992.cn/ 楼上被列入黑名单,用 http://114.215.133.70:41017/

  3. Android和WCF通信 - 大数据压缩后传输

    Android和WCF通信 - 大数据压缩后传输 本帖来源:http://www.cnblogs.com/lykbk/archive/2013/08/15/3259045.html 最近一直在优化项目 ...

  4. VB中判断空的几种方法,Null, Missing, Empty, Nothing, vbNullString区别

    vb6中存在几个虚幻的值:Null.Missing.Empty.Nothing.vbNullString.除了最后一个之外,每一个值都不能直接用“a=值”来判断.下面分别解释一下这几个值的含义. 1. ...

  5. [platform]新旧内核的device设备注册对比

    转自:http://blog.chinaunix.net/uid-7332782-id-3268801.html 1. Version2.6内核启动过程 start_kernel( ) //板子上电启 ...

  6. 黄聪:WordPress 备案期间临时关闭站点设置404

    在header.php文件顶部添加如下代码即可: <? if( !is_user_logged_in() ){ wp_die('网站备案审核中……', '网站备案', array('respon ...

  7. ylbtech-LanguageSamples-Yield

    ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Yield 1.A,示例(Sample) 返回顶部 “Yield”示例 本示例演示如何创 ...

  8. web性能 部分

    雅虎34条提高性能的经验 http://www.cnblogs.com/li0803/archive/2009/09/20/1570581.html 减少http请求 1.尽量合并多个css.js文件 ...

  9. Tornado

    Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效 ...

  10. div高度自适应

    第一种: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...