NopCommerce 3.80框架研究(一) 数据访问与持久化
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
解决方案结构:

- 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; } - 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
- Nop.Services\
主要定义数据操作和业务逻辑
基本上每个操作类都有一个对应的接口,如果需要新增自己的业务对象则应该参照如下步骤:
- 定义你的操作类
- 从操作类中提取接口
- 指定注入类型
如:下图中 IRepository<Customer>
_customerRepository 表示数据仓库的操作对象,
IGenericAttributeService _genericAttributeService;
这个类型类似于CustomerService的定义,也是有一个接口和一个实现类
它们都将在Nop.Web.Framework.DependencyRegistrar.Register(ContainerBuilder builder, ITypeFinder typeFinder, NopConfig config)
方法中定义如何自动注入

NopCommerce 3.80框架研究(一) 数据访问与持久化的更多相关文章
- NopCommerce 3.80框架研究(二) MVC 表示层与数据验证
表示层框架结构 /Views/Shared/_Root.Head.cshtml /Views/Shared/_Root.cshtml /Views/Shared/_ColumnsOne.cshtml ...
- NopCommerce 3.80框架研究(三)替换tinymce 为KindEditor
NopCommerce 自带的编辑器tinymce 功能不是很全.所以尝试将其替换为功能更强大的 KindEditor 并替实现文件上传和在线浏览功能 首先下载 并解压到如下位置 请注意这里是部署在N ...
- SpringBoot详细研究-02数据访问
Springboot对数据访问部分提供了非常强大的集成,支持mysql,oracle等传统数据库的同时,也支持Redis,MongoDB等非关系型数据库,极大的简化了DAO的代码,尤其是Spring ...
- MyBatis框架的XML数据访问Dao层接口的组合使用
MyBatis 的前生为Apache的开源项目iBatis.其优势在于灵活,几乎可以替代JDBC,同时提供了编程接口.目前MyBatis的数据访问Dao层不需要实现类,也不需要像JDBC那样拼接Hql ...
- SpringBoot之旅第五篇-数据访问
一.引言 大部分系统都离不开数据访问,数据库包括SQL和NOSQL,SQL是指关系型数据库,常见的有SQL Server,Oracle,MySQL(开源),NOSQL是泛指非关系型数据库,常见的有Mo ...
- springboot 数据访问【转】【补】
六.SpringBoot与数据访问 1.JDBC pom.xml配置 <dependencies> <dependency> <groupId>org.spring ...
- 项目架构开发:数据访问层之Cache
数据访问层简单介绍 数据访问层,提供整个项目的数据访问与持久化功能.在分层系统中所有有关数据访问.检索.持久化的任务,最终都将在这一层完成. 来看一个比较经典的数据访问层结构图 大概可以看出如下信息 ...
- 分享自己的超轻量级高性能ORM数据访问框架Deft
Deft 简介 Deft是一个超轻量级高性能O/R mapping数据访问框架,简单易用,几分钟即可上手. Deft包含如下但不限于此的特点: 1.按照Transact-SQL的语法语义风格来设计,只 ...
- 解析大型.NET ERP系统数据访问 对象关系映射框架LLBL Gen Pro
LLBL Gen Pro是一个为.NET开发人员设计的的对象关系映射(ORM)框架,与NHibernate,Entity Framework等框架一样,通过实体与数据表的映射,实现关系数据库持久化. ...
随机推荐
- IntelliJ IDEA修改Output输出缓存区大小【应对:too much output to process】
IntelliJ IDEA默认的Output输出缓存区大小只有1024KB,超过大小限制的就会被清除,而且还会显示[too much output to process],可通过如下配置界面进行修改O ...
- php计算字符串长度:utf8编码,包含中文
php计算字符串长度:utf8编码 中文当作1个字符处理(strlen默认当作两个字符) 上函数: /** * 计算 UTF-8 字符串长度 * * @param string $str * @ret ...
- android学习笔记34——ClipDrawable资源
ClipDrawable ClipDrawable代表从其他位图上截取一个“图片片段” 在XML文件中定义ClipDrawable对象使用<clip.../>元素,该元素的语法为: 以上语 ...
- TSP(旅行者问题)——动态规划详解(转)
1.问题定义 TSP问题(旅行商问题)是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短. 假设现在有四个城市,0,1,2,3,他们之间的代价如图一,可以存成 ...
- 黄聪:WordPress根目录(Root)
index.php:WordPress核心索引文件,即博客输出文件. license.txt:WordPress GPL许可证文件. my-hacks.php:定义了博客输出之前处理的追加程序.默认安 ...
- 黄聪:wordpress中remove_action、add_action、 do_action()的hook钩子都有哪些
原文地址:http://codex.wordpress.org/Plugin_API/Action_Reference muplugins_loaded After must-use plugins ...
- 最大熵的Java实现
这是一个最大熵的简明Java实现,提供训练与预测接口.训练采用GIS训练算法,附带示例训练集.本文旨在介绍最大熵的原理.分类和实现,不涉及公式推导或其他训练算法,请放心食用. 最大熵理论 简介 最大熵 ...
- spark1.4加载mysql数据 创建Dataframe及join操作连接方法问题
首先我们使用新的API方法连接mysql加载数据 创建DF import org.apache.spark.sql.DataFrame import org.apache.spark.{SparkCo ...
- Hibernae 的延迟加载
http://blog.csdn.net/xc635960736/article/details/7049863 Hibernae 的延迟加载 Hibernae 的延迟加载是一个非常常用的技术,实 ...
- unix 中 ps -ef命令详解
ps -ef 查看正在活动的进程 ps -ef |grep abc 查看含有"abc"的活动进程 ps -ef |grep -v abc 查看不含abc的活动进程 1)ps a 显 ...