NopCommerce 3.80框架研究(一) 數據訪問與持久化


NopCommerce 是一個國外的開源電商系統。3.80版本使用EF6.0 和.Net Framework 4.5.1

並引入了AutofacAutofac是一款IOC框架,比較於其他的IOC框架,如Spring.NETUnityCastle等等所包含的,它很輕量級 性能上非常高。

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

   

   

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM