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") } |