ASP.NET MVC 4 – Dependency Injection ( Unity.Mvc4 ) + AutoMapper + Entity Framework 5 ( Insert Record ) 方法

 
ASP.NET MVC 4 – Dependency Injection ( Unity.Mvc4 ) + AutoMapper + Entity Framework 5 ( Insert Record ) 方法

   ( Project : ProductServiceLibrary ) IProductRepository.cs
 
   using System;
   using System.Collections.Generic;
   using System.Linq;
   using System.Text;
   using System.Threading.Tasks;
 
   namespace ProductServiceLibrary
   {
      public interface IProductRepository
      {
         IEnumerable<ProductEntity> GetAll();
         IEnumerable<ProductEntity> GetAll(int rowcount);
         ProductEntity Get(int id);
         void Add(ProductEntity product);
      }
   }
 
   ( Project : ProductServiceLibrary ) ProductRepository.cs
 
   using System;
   using System.Collections.Generic;
   using System.Linq;
   using System.Text;
   using System.Threading.Tasks;
 
   namespace ProductServiceLibrary
   {
      public class ProductRepository : IProductRepository
      {
 
         private List<ProductEntity> products;
         private BIProductEntities entity;
 
         public ProductRepository()
         {
            entity = new BIProductEntities();
            products = entity.ProductEntities.OrderBy(x => new { x.cat, x.subcat, x.model }).ToList();
         }
 
         public IEnumerable<ProductEntity> GetAll()
         {
            return products;
         }
 
         public IEnumerable<ProductEntity> GetAll(int rowcount)
         {
            return products.Take(rowcount).ToList();
         }
 
         public ProductEntity Get(int id)
         {
            return products.Find(p => p.id == id);
         }
 
         public void Add(ProductEntity Product)
         {
            entity = new BIProductEntities();
            entity.ProductEntities.Add(Product);
            entity.SaveChanges();
         }
 
      }
   }
 
   ( Project : MVCApplication ) \Models\Product.cs
 
   using System;
   using System.Collections.Generic;
   using System.Linq;
   using System.Web;
   using System.Data.Entity;
   using System.ComponentModel.DataAnnotations;
   using System.ComponentModel.DataAnnotations.Schema;
   using System.Globalization;
   using System.Web.Security;
 
   namespace MvcApplication.Models
   {
      public class Product
      {
         [Key][Required]
         public int id { get; set; }
         [Required]
         public string cat { get; set; }
         [Required]
         public string subcat { get; set; }
         [Required]
         public string model { get; set; }
         [Required]
         public long price { get; set; }
      }
   }
 
   ( Project : MVCApplication ) AutoMapperConfig.cs
 
   using System;
   using System.Collections.Generic;
   using AutoMapper;
   using ProductServiceLibrary;
 
   namespace MvcApplication
   {
      public class AutoMapperConfig
      {
         public static void Configure()
         {
            Mapper.CreateMap<ProductServiceLibrary.ProductEntity, MvcApplication.Models.Product>().ReverseMap();
            Mapper.AssertConfigurationIsValid();
         }
      }
   }
 
   ( Project : MVCApplication ) Global.asax.cs
 
   using System.Web.Mvc;
   using Microsoft.Practices.Unity;
   using Unity.Mvc4;
   using ProductServiceLibrary;
 
   namespace MvcApplication
   {
      public static class Bootstrapper
      {
         public static IUnityContainer Initialise()
         {
            var container = BuildUnityContainer();
 
            DependencyResolver.SetResolver(new UnityDependencyResolver(container));
 
            return container;
         }
 
         private static IUnityContainer BuildUnityContainer()
         {
            var container = new UnityContainer();
 
            container.RegisterType();
 
            RegisterTypes(container);
 
            return container;
         }
 
         public static void RegisterTypes(IUnityContainer container)
         {
         }
 
      }
   }
 
   ( Project : MvcApplication ) Bootstrapper.cs
 
   using System.Web.Mvc;
   using Microsoft.Practices.Unity;
   using Unity.Mvc4;
   using ProductServiceLibrary;
 
   namespace MvcApplication
   {
      public static class Bootstrapper
      {
 
         public static IUnityContainer Initialise()
         {
            var container = BuildUnityContainer();
 
            DependencyResolver.SetResolver(new UnityDependencyResolver(container));
 
            return container;
         }
 
         private static IUnityContainer BuildUnityContainer()
         {
            var container = new UnityContainer();
 
            container.RegisterType<IProductRepository, ProductRepository>();
 
            RegisterTypes(container);
 
            return container;
         }
 
         public static void RegisterTypes(IUnityContainer container)
         {
         }
 
      }
   }
 
   ( Project : MVCApplication ) \Controllers\HomeController.cs
 
   using System;
   using System.Collections.Generic;
   using System.Linq;
   using System.Web;
   using System.Web.Mvc;
   using ProductServiceLibrary;
   using AutoMapper;
   using MvcApplication.Models;
 
   namespace MvcApplication.Controllers
   {
      public class HomeController : Controller
      {
         readonly IProductRepository repository;
 
         public HomeController(IProductRepository repository)
         {
            this.repository = repository;
         }
 
         … …
 
         public ActionResult ProductForm()
         {
            MvcApplication1.Models.Product model = new MvcApplication1.Models.Product();
            model.id = 0;
            model.cat = "";
            model.subcat = "";
            model.model = "";
            model.price = 0;
 
            return View(model);
         }
 
         [HttpPost]
         public ActionResult ProductForm(Product ProductModel)
         {
            if (ModelState.IsValid)
            {
               ProductServiceLibrary.ProductEntity item = new ProductServiceLibrary.ProductEntity();
               repository.Add(Mapper.Map(ProductModel, item));
            }
 
            return RedirectToAction("Index");
         }
      }
   }
 
   ( Project : MVCApplication ) \Views\ProductForm.cshtml
 
   @model MvcApplication1.Models.Product
 
   … …
 
   @using (Html.BeginForm()) {
 
      @Html.AntiForgeryToken()
      @Html.ValidationSummary(true)
 
      <fieldset>
 
         <legend>Product</legend>
 
         <div class="editor-label">
            @Html.LabelFor(model => model.id)
         </div>
         <div class="editor-field">
            @Html.EditorFor(model => model.id)
            @Html.ValidationMessageFor(model => model.id)
         </div>
 
         <div class="editor-label">
            @Html.LabelFor(model => model.cat)
         </div>
         <div class="editor-field">
            @Html.EditorFor(model => model.cat)
            @Html.ValidationMessageFor(model => model.cat)
         </div>
 
         <div class="editor-label">
            @Html.LabelFor(model => model.subcat)
         </div>
         <div class="editor-field">
            @Html.EditorFor(model => model.subcat)
            @Html.ValidationMessageFor(model => model.subcat)
         </div>
 
         <div class="editor-label">
            @Html.LabelFor(model => model.model)
         </div>
         <div class="editor-field">
            @Html.EditorFor(model => model.model)
            @Html.ValidationMessageFor(model => model.model)
         </div>
 
         <div class="editor-label">
            @Html.LabelFor(model => model.price)
         </div>
         <div class="editor-field">
            @Html.EditorFor(model => model.price)
            @Html.ValidationMessageFor(model => model.price)
         </div>
 
         <p>
            <input type="submit" value="Create" />
         </p>
 
      </fieldset>
 
   }
 
   @section Scripts {
      @Scripts.Render("~/bundles/jqueryval")
   }