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) 方法中定義如何自動注入