Skip to main content

Adding new table in nopcommerce

There was a enhancement I received from client in nopCommerce. Which was require to add a new table in nopCommerce(NC) database, so that we have store additional information in it.

As per NC team we should not add any enhancement directly to NC. Enhancement must be added in the form of Plugin. As I didn't learn how to develop plugin so for the quick resolution I have added table to NC.

Here are the steps to add table to NC:

1) Add your POCO class under Nop.Core > Domain > [Related Folder] > YourClass.cs

using Nop.Core.Domain.Customers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Nop.Core.Domain.Orders
{
    public partial class MediaClipUserMapping : BaseEntity
    {
        public int CustomerId { get; set; }
        public string MediaClipUserId { get; set; }

        /// <summary>
        /// Gets or sets the customer
        /// </summary>
        public virtual Customer Customer { get; set; }
    }
}

2) Add table mapping class as YourClassMap.cs under Nop.Data >Mapping > [Related Folder] > YourClassMap.cs


using Nop.Core.Domain.Orders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Nop.Data.Mapping.Orders
{
    public partial class MediaClipUserMappingMap : NopEntityTypeConfiguration<MediaClipUserMapping>
    {
        public MediaClipUserMappingMap()
        {
            this.ToTable("MediaClipUserMappings");
            this.HasRequired(o => o.Customer)
                .WithMany()
                .HasForeignKey(o => o.CustomerId);
        }
    }
}

3) Create Service Interface:


using Nop.Core.Domain.Orders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Nop.Services.Orders
{
    public partial interface IMediaClipUserMappingsService
    {
        List<MediaClipUserMapping> GetMediaClipUserMapping();

        List<MediaClipUserMapping> GetMediaClipUserMappingByCustomerId();

        MediaClipUserMapping GetMediaClipUserMapping(int CustomerId);

        MediaClipUserMapping AddMediaClipUserMapping(MediaClipUserMapping mediaClipUserMapping);

        MediaClipUserMapping EditMediaClipUserMapping(int CustomerId, MediaClipUserMapping mediaClipUserMapping);

        void DeleteMediaClipUserMapping(MediaClipUserMapping mediaClipUserMapping);
    }
}

4) Create Service Class:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Nop.Core.Domain.Orders;
using Nop.Core.Data;
using Nop.Core;
using Nop.Services.Directory;
using Nop.Services.Catalog;
using Nop.Services.Localization;
using Nop.Services.Customers;
using Nop.Services.Events;
using Nop.Services.Security;
using Nop.Services.Shipping.Date;
using Nop.Services.Stores;
using Nop.Services.Common;
using Nop.Services.Helpers;

namespace Nop.Services.Orders
{
    public partial class MediaClipUserMappingsService : IMediaClipUserMappingsService
    {

        #region Fields

        private readonly IRepository<MediaClipUserMapping> _sciRepository;
        private readonly IWorkContext _workContext;
        private readonly IStoreContext _storeContext;
        private readonly ICurrencyService _currencyService;
        private readonly IProductService _productService;
        private readonly ILocalizationService _localizationService;
        private readonly IProductAttributeParser _productAttributeParser;
        private readonly ICheckoutAttributeService _checkoutAttributeService;
        private readonly ICheckoutAttributeParser _checkoutAttributeParser;
        private readonly IPriceFormatter _priceFormatter;
        private readonly ICustomerService _customerService;
        private readonly ShoppingCartSettings _shoppingCartSettings;
        private readonly IEventPublisher _eventPublisher;
        private readonly IPermissionService _permissionService;
        private readonly IAclService _aclService;
        private readonly IDateRangeService _dateRangeService;
        private readonly IStoreMappingService _storeMappingService;
        private readonly IGenericAttributeService _genericAttributeService;
        private readonly IProductAttributeService _productAttributeService;
        private readonly IDateTimeHelper _dateTimeHelper;

        #endregion


        #region Ctor

        /// <summary>
        /// Ctor
        /// </summary>
        /// <param name="sciRepository">Shopping cart repository</param>
        /// <param name="workContext">Work context</param>
        /// <param name="storeContext">Store context</param>
        /// <param name="currencyService">Currency service</param>
        /// <param name="productService">Product settings</param>
        /// <param name="localizationService">Localization service</param>
        /// <param name="productAttributeParser">Product attribute parser</param>
        /// <param name="checkoutAttributeService">Checkout attribute service</param>
        /// <param name="checkoutAttributeParser">Checkout attribute parser</param>
        /// <param name="priceFormatter">Price formatter</param>
        /// <param name="customerService">Customer service</param>
        /// <param name="shoppingCartSettings">Shopping cart settings</param>
        /// <param name="eventPublisher">Event publisher</param>
        /// <param name="permissionService">Permission service</param>
        /// <param name="aclService">ACL service</param>
        /// <param name="dateRangeService">Date range service</param>
        /// <param name="storeMappingService">Store mapping service</param>
        /// <param name="genericAttributeService">Generic attribute service</param>
        /// <param name="productAttributeService">Product attribute service</param>
        /// <param name="dateTimeHelper">Datetime helper</param>
        public MediaClipUserMappingsService(IRepository<MediaClipUserMapping> sciRepository,
            IWorkContext workContext,
            IStoreContext storeContext,
            ICurrencyService currencyService,
            IProductService productService,
            ILocalizationService localizationService,
            IProductAttributeParser productAttributeParser,
            ICheckoutAttributeService checkoutAttributeService,
            ICheckoutAttributeParser checkoutAttributeParser,
            IPriceFormatter priceFormatter,
            ICustomerService customerService,
            ShoppingCartSettings shoppingCartSettings,
            IEventPublisher eventPublisher,
            IPermissionService permissionService,
            IAclService aclService,
            IDateRangeService dateRangeService,
            IStoreMappingService storeMappingService,
            IGenericAttributeService genericAttributeService,
            IProductAttributeService productAttributeService,
            IDateTimeHelper dateTimeHelper)
        {
            this._sciRepository = sciRepository;
            this._workContext = workContext;
            this._storeContext = storeContext;
            this._currencyService = currencyService;
            this._productService = productService;
            this._localizationService = localizationService;
            this._productAttributeParser = productAttributeParser;
            this._checkoutAttributeService = checkoutAttributeService;
            this._checkoutAttributeParser = checkoutAttributeParser;
            this._priceFormatter = priceFormatter;
            this._customerService = customerService;
            this._shoppingCartSettings = shoppingCartSettings;
            this._eventPublisher = eventPublisher;
            this._permissionService = permissionService;
            this._aclService = aclService;
            this._dateRangeService = dateRangeService;
            this._storeMappingService = storeMappingService;
            this._genericAttributeService = genericAttributeService;
            this._productAttributeService = productAttributeService;
            this._dateTimeHelper = dateTimeHelper;
        }

        #endregion

        public MediaClipUserMapping AddMediaClipUserMapping(MediaClipUserMapping mediaClipUserMapping)
        {
            if (mediaClipUserMapping == null)
                throw new ArgumentNullException("mediaClipUserMapping");

            _sciRepository.Insert(mediaClipUserMapping);

            //event notification
            _eventPublisher.EntityInserted(mediaClipUserMapping);

            return mediaClipUserMapping;
        }

        public virtual void DeleteMediaClipUserMapping(MediaClipUserMapping mediaClipUserMapping)
        {
            if (mediaClipUserMapping == null)
                throw new ArgumentNullException("mediaClipUserMapping");

            _sciRepository.Delete(mediaClipUserMapping);

            //event notification
            _eventPublisher.EntityDeleted(mediaClipUserMapping);
        }

        public virtual MediaClipUserMapping EditMediaClipUserMapping(int CustomerId, MediaClipUserMapping mediaClipUserMapping)
        {
            throw new NotImplementedException();
        }

        public virtual List<MediaClipUserMapping> GetMediaClipUserMapping()
        {
            throw new NotImplementedException();
        }

        public virtual MediaClipUserMapping GetMediaClipUserMapping(int CustomerId)
        {
            throw new NotImplementedException();
        }

        public virtual List<MediaClipUserMapping> GetMediaClipUserMappingByCustomerId()
        {
            throw new NotImplementedException();
        }
    }
}

5) Register dependency

Now add dependency to DependencyRegistrar.cs as below:

builder.RegisterType<MediaClipUserMappingsService>().As<IMediaClipUserMappingsService>().InstancePerLifetimeScope();


6) Add real table in sql database.



Now you are done.








Comments