一,摘要
本篇文章我们将使用ASP.NET MVC3,Razor,EF Code First创建Web应用程序.覆盖Unity2.0,泛型Repository以及EF Code First的工作单元.需要使用到的工具如下:
1.ASP.NET MVC 3
2.EF Code First CTP5
3.Unity2.0
二,安装工具
安装好Visual Studio2010后继续安装MVC3(http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d2928bc1-f48c-4e95-a064-2a455a22c8f6),NuGet(http://nuget.codeplex.com/)
三,建立程序
1.打开Visual Studio2010选择选择新建ASP.NET MVC 3 Web Application,取名叫MVC3DIApplication:
下面添加EF CTP5与Unity2.0,在刚建立的项目上右键,选择添加类库包引用,点击左边的online,在搜索框里输入Unity,找到Unity后点install.,安装成功后(图二)它自动把需要的程序集加入到项目中(图三):
三,建立领域模型
1.添加一个类库,命名MVC3DIApplication.Domain,然后在里面添加文件夹Entities,在文件夹里添加实体模型类
Category.cs:
1: using System;<!--CRLF-->
2: using System.Collections.Generic;<!--CRLF-->
3: using System.Linq;<!--CRLF-->
4: using System.Web;<!--CRLF-->
5: using System.ComponentModel.DataAnnotations;<!--CRLF-->
6: <!--CRLF-->
7: namespace MyFinance.Domain<!--CRLF-->
8: { <!--CRLF-->
9: public class Category<!--CRLF-->
10: { <!--CRLF-->
11: <!--CRLF-->
12: public int CategoryId { get; set; }<!--CRLF-->
13: <!--CRLF-->
14: [Required(ErrorMessage = "Name Required")]<!--CRLF-->
15: [StringLength(25, ErrorMessage = "Must be less than 25 characters")]<!--CRLF-->
16: public string Name { get; set;}<!--CRLF-->
17: public string Description { get; set; }<!--CRLF-->
18: public virtual ICollection<expense> Expenses { get; set; }</expense><!--CRLF-->
19: } <!--CRLF-->
20: } <!--CRLF-->
Expense.cs:
1: using System;<!--CRLF-->
2: using System.Collections.Generic;<!--CRLF-->
3: using System.Linq;<!--CRLF-->
4: using System.Text;<!--CRLF-->
5: <!--CRLF-->
6: namespace MVC3DIApplication.Domain.Entities<!--CRLF-->
7: { <!--CRLF-->
8: public class Expense<!--CRLF-->
9: { <!--CRLF-->
10: public int ExpenseId { get; set; }<!--CRLF-->
11: public string Transaction { get; set; }<!--CRLF-->
12: public DateTime Date { get; set; }<!--CRLF-->
13: public double Amount { get; set; }<!--CRLF-->
14: public int CategoryId { get; set; }<!--CRLF-->
15: public virtual Category Category { get; set; }<!--CRLF-->
16: } <!--CRLF-->
17: } <!--CRLF-->
2.继续添加类库MVC3DIApplication.Data,在其下新建一个叫MyFinanceContext的类,该类继承自DbContext,用来映射我们的模型到数据库表
1: using System;<!--CRLF-->
2: using System.Collections.Generic;<!--CRLF-->
3: using System.Linq;<!--CRLF-->
4: using System.Text;<!--CRLF-->
5: using System.Data.Entity;<!--CRLF-->
6: using MVC3DIApplication.Domain.Entities;<!--CRLF-->
7: <!--CRLF-->
8: namespace MVC3DIApplication.Data<!--CRLF-->
9: { <!--CRLF-->
10: public class MyFinanceContext : DbContext<!--CRLF-->
11: { <!--CRLF-->
12: public MyFinanceContext() : base("MyFinance") { }<!--CRLF-->
13: public DbSet<category> Categories { get; set; }</category><!--CRLF-->
14: public DbSet<expense> Expenses { get; set; }</expense><!--CRLF-->
15: public virtual void Commit()<!--CRLF-->
16: { <!--CRLF-->
17: base.SaveChanges();<!--CRLF-->
18: } <!--CRLF-->
19: } <!--CRLF-->
20: } <!--CRLF-->
3.修改Web.comfig:
1: connectionStrings><!--CRLF-->
2: add name="MyFinance" connectionString="data source=./MSSQLSERVER2008;Initial Catalog=MVC3DI;Persist Security Info=True;User ID=sa;Password=suzhi921;" providerName="System.Data.SqlClient" /><!--CRLF-->
3: add name="ApplicationServices" connectionString="data source=./SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" /><!--CRLF-->
4: connectionStrings><!--CRLF-->
四,建立泛型Repository
MVC3DIApplication.Data类库下建立Infrastructure文件夹,在里面添加类IRepository.cs:
1: using System;<!--CRLF-->
2: using System.Collections.Generic;<!--CRLF-->
3: using System.Linq;<!--CRLF-->
4: using System.Text;<!--CRLF-->
5: <!--CRLF-->
6: namespace MVC3DIApplication.Data.Infrastructure<!--CRLF-->
7: { <!--CRLF-->
8: public interface IRepository<t><span style="color: #0000ff">where</span> T : <span style="color: #0000ff">class</span></t><!--CRLF-->
9: { <!--CRLF-->
10: void Add(T entity);<!--CRLF-->
11: void Delete(T entity);<!--CRLF-->
12: void Delete(Func<t boolean> predicate);</t><!--CRLF-->
13: T GetById(long Id);<!--CRLF-->
14: T Get(Func<t boolean><span style="color: #0000ff">where</span>);</t> <!--CRLF-->
15: IEnumerable<t> GetAll();</t> <!--CRLF-->
16: IEnumerable<t> GetMany(Func<t style="color: #0000ff">bool> <span style="color: #0000ff">where</span>);</t></t> <!--CRLF-->
17: } <!--CRLF-->
18: } <!--CRLF-->
IDatabaseFactory.cs:
1: using System;<!--CRLF-->
2: using System.Collections.Generic;<!--CRLF-->
3: using System.Linq;<!--CRLF-->
4: using System.Text;<!--CRLF-->
5: <!--CRLF-->
6: namespace MVC3DIApplication.Data.Infrastructure<!--CRLF-->
7: { <!--CRLF-->
8: public interface IDatabaseFactory : IDisposable<!--CRLF-->
9: { <!--CRLF-->
10: MyFinanceContext Get(); <!--CRLF-->
11: } <!--CRLF-->
12: } <!--CRLF-->
RepositoryBase.cs:
1: using System;<!--CRLF-->
2: using System.Collections.Generic;<!--CRLF-->
3: using System.Linq;<!--CRLF-->
4: using System.Text;<!--CRLF-->
5: using System.Data.Entity;<!--CRLF-->
6: <!--CRLF-->
7: namespace MVC3DIApplication.Data.Infrastructure<!--CRLF-->
8: { <!--CRLF-->
9: public abstract class RepositoryBase<t><span style="color: #0000ff">where</span> T : <span style="color: #0000ff">class</span></t><!--CRLF-->
10: { <!--CRLF-->
11: private MyFinanceContext dataContext;<!--CRLF-->
12: private readonly IDbSet<t> dbset;</t><!--CRLF-->
13: protected RepositoryBase(IDatabaseFactory databaseFactory)<!--CRLF-->
14: { <!--CRLF-->
15: DatabaseFactory = databaseFactory; <!--CRLF-->
16: dbset = DataContext.Set<t>();</t> <!--CRLF-->
17: } <!--CRLF-->
18: <!--CRLF-->
19: protected IDatabaseFactory DatabaseFactory<!--CRLF-->
20: { <!--CRLF-->
21: get; <!--CRLF-->
22: private set;<!--CRLF-->
23: } <!--CRLF-->
24: <!--CRLF-->
25: protected MyFinanceContext DataContext<!--CRLF-->
26: { <!--CRLF-->
27: get { return dataContext ?? (dataContext = DatabaseFactory.Get()); }<!--CRLF-->
28: } <!--CRLF-->
29: public virtual void Add(T entity)<!--CRLF-->
30: { <!--CRLF-->
31: dbset.Add(entity); <!--CRLF-->
32: } <!--CRLF-->
33: <!--CRLF-->
34: public virtual void Delete(T entity)<!--CRLF-->
35: { <!--CRLF-->
36: dbset.Remove(entity); <!--CRLF-->
37: } <!--CRLF-->
38: public void Delete(Func<t boolean><span style="color: #0000ff">where</span>)</t><!--CRLF-->
39: { <!--CRLF-->
40: IEnumerable<t> objects = dbset.Where<t>(<span style="color: #0000ff">where</span>).AsEnumerable();</t></t> <!--CRLF-->
41: foreach (T obj in objects)<!--CRLF-->
42: dbset.Remove(obj); <!--CRLF-->
43: } <!--CRLF-->
44: public virtual T GetById(long id)<!--CRLF-->
45: { <!--CRLF-->
46: return dbset.Find(id);<!--CRLF-->
47: } <!--CRLF-->
48: <!--CRLF-->
49: public virtual IEnumerable<t> GetAll()</t><!--CRLF-->
50: { <!--CRLF-->
51: return dbset.ToList();<!--CRLF-->
52: } <!--CRLF-->
53: public virtual IEnumerable<t> GetMany(Func<t style="color: #0000ff">bool> <span style="color: #0000ff">where</span>)</t></t><!--CRLF-->
54: { <!--CRLF-->
55: return dbset.Where(where).ToList();<!--CRLF-->
56: } <!--CRLF-->
57: public T Get(Func<t boolean><span style="color: #0000ff">where</span>)</t><!--CRLF-->
58: { <!--CRLF-->
59: return dbset.Where(where).FirstOrDefault<t>();</t><!--CRLF-->
60: } <!--CRLF-->
61: } <!--CRLF-->
62: } <!--CRLF-->
五,工作单元
工作单元主要用来维护受Business transaction影响的对象以及并发等问题
MVC3DIApplication.Data类库的Infrastructure下建立IUnitOfWork.cs:
1: using System;<!--CRLF-->
2: using System.Collections.Generic;<!--CRLF-->
3: using System.Linq;<!--CRLF-->
4: using System.Text;<!--CRLF-->
5: <!--CRLF-->
6: namespace MVC3DIApplication.Data.Infrastructure<!--CRLF-->
7: { <!--CRLF-->
8: public interface IUnitOfWork<!--CRLF-->
9: { <!--CRLF-->
10: void Commit();<!--CRLF-->
11: } <!--CRLF-->
12: } <!--CRLF-->
UnitOfWork.cs:
1: using System;<!--CRLF-->
2: using System.Collections.Generic;<!--CRLF-->
3: using System.Linq;<!--CRLF-->
4: using System.Text;<!--CRLF-->
5: <!--CRLF-->
6: namespace MVC3DIApplication.Data.Infrastructure<!--CRLF-->
7: { <!--CRLF-->
8: public class UnitOfWork : IUnitOfWork<!--CRLF-->
9: { <!--CRLF-->
10: private readonly IDatabaseFactory databaseFactory;<!--CRLF-->
11: private MyFinanceContext dataContext;<!--CRLF-->
12: <!--CRLF-->
13: public UnitOfWork(IDatabaseFactory databaseFactory)<!--CRLF-->
14: { <!--CRLF-->
15: this.databaseFactory = databaseFactory;<!--CRLF-->
16: } <!--CRLF-->
17: <!--CRLF-->
18: protected MyFinanceContext DataContext<!--CRLF-->
19: { <!--CRLF-->
20: get { return dataContext ?? (dataContext = databaseFactory.Get()); }<!--CRLF-->
21: } <!--CRLF-->
22: <!--CRLF-->
23: public void Commit()<!--CRLF-->
24: { <!--CRLF-->
25: DataContext.Commit(); <!--CRLF-->
26: } <!--CRLF-->
27: } <!--CRLF-->
28: } <!--CRLF-->
六,Category Repository
MVC3DIApplication.Data类库的下建立Repositories文件夹,里面存储我们的Repositories,下面简历CategoryRepository:
1: using System;<!--CRLF-->
2: using System.Collections.Generic;<!--CRLF-->
3: using System.Linq;<!--CRLF-->
4: using System.Text;<!--CRLF-->
5: using MVC3DIApplication.Data.Infrastructure;<!--CRLF-->
6: using MVC3DIApplication.Domain.Entities;<!--CRLF-->
7: <!--CRLF-->
8: namespace MVC3DIApplication.Data.Repositories<!--CRLF-->
9: { <!--CRLF-->
10: public class CategoryRepository : RepositoryBase<category>, ICategoryRepository</category><!--CRLF-->
11: { <!--CRLF-->
12: public CategoryRepository(IDatabaseFactory databaseFactory)<!--CRLF-->
13: : base(databaseFactory)<!--CRLF-->
14: { <!--CRLF-->
15: } <!--CRLF-->
16: } <!--CRLF-->
17: public interface ICategoryRepository : IRepository<category></category><!--CRLF-->
18: { <!--CRLF-->
19: } <!--CRLF-->
20: } <!--CRLF-->
如果我们有额外的方法,那么我们能定义在上面的Repository里.
七,使用Unity2.0
我们为Unity创建一个自定义的生命周期管理器去存储当前上下文的容器,同时创建控制器工厂
1: using System;<!--CRLF-->
2: using System.Collections.Generic;<!--CRLF-->
3: using System.Linq;<!--CRLF-->
4: using System.Web;<!--CRLF-->
5: using Microsoft.Practices.Unity;<!--CRLF-->
6: using System.Web.Mvc;<!--CRLF-->
7: using System.Web.Routing;<!--CRLF-->
8: <!--CRLF-->
9: namespace MVC3DIApplication.IoC<!--CRLF-->
10: { <!--CRLF-->
11: public class UnityControllerFactory : DefaultControllerFactory<!--CRLF-->
12: { <!--CRLF-->
13: IUnityContainer container; <!--CRLF-->
14: public UnityControllerFactory(IUnityContainer container)<!--CRLF-->
15: { <!--CRLF-->
16: this.container = container;<!--CRLF-->
17: } <!--CRLF-->
18: protected override IController GetControllerInstance(RequestContext reqContext, Type controllerType)<!--CRLF-->
19: { <!--CRLF-->
20: IController controller; <!--CRLF-->
21: if (controllerType == null)<!--CRLF-->
22: throw new HttpException(<!--CRLF-->
23: 404, String.Format( <!--CRLF-->
24: "The controller for path '{0}' could not be found" +<!--CRLF-->
25: "or it does not implement IController.",<!--CRLF-->
26: reqContext.HttpContext.Request.Path)); <!--CRLF-->
27: <!--CRLF-->
28: if (!typeof(IController).IsAssignableFrom(controllerType))<!--CRLF-->
29: throw new ArgumentException(<!--CRLF-->
30: string.Format(<!--CRLF-->
31: "Type requested is not a controller: {0}",<!--CRLF-->
32: controllerType.Name), <!--CRLF-->
33: "controllerType");<!--CRLF-->
34: try<!--CRLF-->
35: { <!--CRLF-->
36: //controller = MvcUnityContainer.Container.Resolve(controllerType)<!--CRLF-->
37: // as IController;<!--CRLF-->
38: controller = container.Resolve(controllerType) as IController;<!--CRLF-->
39: } <!--CRLF-->
40: catch (Exception ex)<!--CRLF-->
41: { <!--CRLF-->
42: throw new InvalidOperationException(String.Format(<!--CRLF-->
43: "Error resolving controller {0}",<!--CRLF-->
44: controllerType.Name), ex); <!--CRLF-->
45: } <!--CRLF-->
46: return controller;<!--CRLF-->
47: } <!--CRLF-->
48: <!--CRLF-->
49: } <!--CRLF-->
50: public class HttpContextLifetimeManager<t> : LifetimeManager, IDisposable</t><!--CRLF-->
51: { <!--CRLF-->
52: public override object GetValue()<!--CRLF-->
53: { <!--CRLF-->
54: return HttpContext.Current.Items[typeof(T).AssemblyQualifiedName];<!--CRLF-->
55: } <!--CRLF-->
56: public override void RemoveValue()<!--CRLF-->
57: { <!--CRLF-->
58: HttpContext.Current.Items.Remove(typeof(T).AssemblyQualifiedName);<!--CRLF-->
59: } <!--CRLF-->
60: public override void SetValue(object newValue)<!--CRLF-->
61: { <!--CRLF-->
62: HttpContext.Current.Items[typeof(T).AssemblyQualifiedName] = newValue;<!--CRLF-->
63: } <!--CRLF-->
64: public void Dispose()<!--CRLF-->
65: { <!--CRLF-->
66: RemoveValue(); <!--CRLF-->
67: } <!--CRLF-->
68: } <!--CRLF-->
69: } <!--CRLF-->
配置Unity:
1: protected void Application_Start()<!--CRLF-->
2: { <!--CRLF-->
3: AreaRegistration.RegisterAllAreas(); <!--CRLF-->
4: RegisterGlobalFilters(GlobalFilters.Filters); <!--CRLF-->
5: RegisterRoutes(RouteTable.Routes); <!--CRLF-->
6: IUnityContainer container = GetUnityContainer(); <!--CRLF-->
7: DependencyResolver.SetResolver(new UnityDependencyResolver(container));<!--CRLF-->
8: } <!--CRLF-->
9: <!--CRLF-->
10: private IUnityContainer GetUnityContainer()<!--CRLF-->
11: { <!--CRLF-->
12: //Create UnityContainer<!--CRLF-->
13: IUnityContainer container = new UnityContainer()<!--CRLF-->
14: .RegisterType<idatabasefactory databasefactory>(<span style="color: #0000ff">new</span> HttpContextLifetimeManager<idatabasefactory>())</idatabasefactory></idatabasefactory> <!--CRLF-->
15: .RegisterType<iunitofwork unitofwork>(<span style="color: #0000ff">new</span> HttpContextLifetimeManager<iunitofwork>())</iunitofwork></iunitofwork> <!--CRLF-->
16: .RegisterType<icategoryrepository categoryrepository>(<span style="color: #0000ff">new</span> HttpContextLifetimeManager<icategoryrepository>());</icategoryrepository></icategoryrepository> <!--CRLF-->
17: return container;<!--CRLF-->
18: } <!--CRLF-->
八,建立控制器
1: using System; <!--CRLF-->
2: using System.Collections.Generic; <!--CRLF-->
3: using System.Linq; <!--CRLF-->
4: using System.Web; <!--CRLF-->
5: using System.Web.Mvc; <!--CRLF-->
6: using MyFinance.Data; <!--CRLF-->
7: using MyFinance.Data.Infrastructure; <!--CRLF-->
8: using MyFinance.Domain; <!--CRLF-->
9: using MyFinance.Helpers; <!--CRLF-->
10: using MyFinance.Service; <!--CRLF-->
11: namespace MyFinance.Web.Controllers <!--CRLF-->
12: { <!--CRLF-->
13: <!--CRLF-->
14: public class CategoryController : Controller<!--CRLF-->
15: { <!--CRLF-->
16: private readonly ICategoryRepository categoryRepository;<!--CRLF-->
17: private readonly IUnitOfWork unitOfWork;<!--CRLF-->
18: <!--CRLF-->
19: public CategoryController(ICategoryRepository categoryRepository, IUnitOfWork unitOfWork)<!--CRLF-->
20: { <!--CRLF-->
21: this.categoryRepository = categoryRepository;<!--CRLF-->
22: this.unitOfWork = unitOfWork;<!--CRLF-->
23: } <!--CRLF-->
24: public ActionResult Index()<!--CRLF-->
25: { <!--CRLF-->
26: var categories = categoryRepository.GetAll(); <!--CRLF-->
27: return View(categories);<!--CRLF-->
28: } <!--CRLF-->
29: [HttpGet] <!--CRLF-->
30: public ActionResult Edit(int id)<!--CRLF-->
31: { <!--CRLF-->
32: var category = categoryRepository.GetById(id); <!--CRLF-->
33: return View(category);<!--CRLF-->
34: } <!--CRLF-->
35: <!--CRLF-->
36: [HttpPost] <!--CRLF-->
37: public ActionResult Edit(int id, FormCollection collection)<!--CRLF-->
38: { <!--CRLF-->
39: var category = categoryRepository.GetById(id); <!--CRLF-->
40: if (TryUpdateModel(category))<!--CRLF-->
41: { <!--CRLF-->
42: unitOfWork.Commit(); <!--CRLF-->
43: return RedirectToAction("Index");<!--CRLF-->
44: } <!--CRLF-->
45: else return View(category);<!--CRLF-->
46: } <!--CRLF-->
47: <!--CRLF-->
48: [HttpGet] <!--CRLF-->
49: public ActionResult Create()<!--CRLF-->
50: { <!--CRLF-->
51: var category = new Category();<!--CRLF-->
52: return View(category);<!--CRLF-->
53: } <!--CRLF-->
54: <!--CRLF-->
55: [HttpPost] <!--CRLF-->
56: public ActionResult Create(Category category)<!--CRLF-->
57: { <!--CRLF-->
58: if (!ModelState.IsValid)<!--CRLF-->
59: { <!--CRLF-->
60: return View("Create", category);<!--CRLF-->
61: } <!--CRLF-->
62: categoryRepository.Add(category); <!--CRLF-->
63: unitOfWork.Commit(); <!--CRLF-->
64: return RedirectToAction("Index");<!--CRLF-->
65: } <!--CRLF-->
66: <!--CRLF-->
67: [HttpPost] <!--CRLF-->
68: public ActionResult Delete(int id)<!--CRLF-->
69: { <!--CRLF-->
70: var category = categoryRepository.GetById(id); <!--CRLF-->
71: categoryRepository.Delete(category); <!--CRLF-->
72: unitOfWork.Commit(); <!--CRLF-->
73: var categories = categoryRepository.GetAll(); <!--CRLF-->
74: return PartialView("CategoryList", categories);<!--CRLF-->
75: <!--CRLF-->
76: } <!--CRLF-->
77: } <!--CRLF-->
78: } <!--CRLF-->
九,建立视图
CategoryList.cshtml:
1: @using MVC3DIApplication.Domain.Entities; <!--CRLF-->
2: @model IEnumerableCategory><!--CRLF-->
3: table><!--CRLF-->
4: tr><!--CRLF-->
5: th>Actionsth><!--CRLF-->
6: th>Nameth><!--CRLF-->
7: th>Descriptionth><!--CRLF-->
8: tr><!--CRLF-->
9: @foreach (var item in Model) { <!--CRLF-->
10: tr><!--CRLF-->
11: td><!--CRLF-->
12: @Html.ActionLink("Edit", "Edit",new { id = item.CategoryId }) <!--CRLF-->
13: @Ajax.ActionLink("Delete", "Delete", new { id = item.CategoryId }, <!--CRLF-->
14: new AjaxOptions { Confirm = "Delete Expense?", HttpMethod = "Post", <!--CRLF-->
15: UpdateTargetId = "divCategoryList" }) <!--CRLF-->
16: td><!--CRLF-->
17: td><!--CRLF-->
18: @item.Name <!--CRLF-->
19: td><!--CRLF-->
20: td><!--CRLF-->
21: @item.Description <!--CRLF-->
22: td><!--CRLF-->
23: tr><!--CRLF-->
24: <!--CRLF-->
25: } <!--CRLF-->
26: <!--CRLF-->
27: table><!--CRLF-->
28: p><!--CRLF-->
29: @Html.ActionLink("Create New", "Create") <!--CRLF-->
30: p><!--CRLF-->
1: @model IEnumerableMVC3DIApplication.Domain.Entities.Category><!--CRLF-->
2: @{ <!--CRLF-->
3: ViewBag.Title = "Index"; <!--CRLF-->
4: } <!--CRLF-->
5: h2>Category Listh2><!--CRLF-->
6: script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript">script><!--CRLF-->
7: div id="divCategoryList"><!--CRLF-->
8: @Html.Partial("CategoryList", Model) <!--CRLF-->
9: div><!--CRLF-->
Create.cshtml:
1: @model MVC3DIApplication.Domain.Entities.Category <!--CRLF-->
2: <!--CRLF-->
3: @{ <!--CRLF-->
4: ViewBag.Title = "Create"; <!--CRLF-->
5: } <!--CRLF-->
6: <!--CRLF-->
7: h2>Createh2><!--CRLF-->
8: <!--CRLF-->
9: script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript">script>
1: <!--CRLF-->
2: <script src="<span" style="color: #006080">"@Url.Content("</span>~/Scripts/jquery.validate.unobtrusive.min.js<span style="color: #006080">")"</span> type=<span style="color: #006080">"text/javascript"</span>></pre><!--CRLF--><span style="color: #0000ff"></</span><span style="color: #800000">script</span><span style="color: #0000ff">></span></pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 12px; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10"> 10:</span> </pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11"> 11:</span> @using (Html.BeginForm()) {</pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 12px; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12"> 12:</span> @Html.ValidationSummary(true)</pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13"> 13:</span> <span style="color: #0000ff"><</span><span style="color: #800000">fieldset</span><span style="color: #0000ff">></span></pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 12px; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14"> 14:</span> <span style="color: #0000ff"><</span><span style="color: #800000">legend</span><span style="color: #0000ff">></span>Category<span style="color: #0000ff"></</span><span style="color: #800000">legend</span><span style="color: #0000ff">></span></pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15"> 15:</span> @Html.EditorFor(model =<span style="color: #0000ff">></span> model) </pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 12px; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16"> 16:</span> <span style="color: #0000ff"><</span><span style="color: #800000">p</span><span style="color: #0000ff">></span></pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum17"> 17:</span> <span style="color: #0000ff"><</span><span style="color: #800000">input</span> <span style="color: #ff0000">type</span><span style="color: #0000ff">="submit"</span> <span style="color: #ff0000">value</span><span style="color: #0000ff">="Create"</span> <span style="color: #0000ff">/></span></pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 12px; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum18"> 18:</span> <span style="color: #0000ff"></</span><span style="color: #800000">p</span><span style="color: #0000ff">></span></pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum19"> 19:</span> <span style="color: #0000ff"></</span><span style="color: #800000">fieldset</span><span style="color: #0000ff">></span></pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 12px; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum20"> 20:</span> }</pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum21"> 21:</span> </pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 12px; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum22"> 22:</span> <span style="color: #0000ff"><</span><span style="color: #800000">div</span><span style="color: #0000ff">></span></pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum23"> 23:</span> @Html.ActionLink("Back to List", "Index")</pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 12px; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum24"> 24:</span> <span style="color: #0000ff"></</span><span style="color: #800000">div</span><span style="color: #0000ff">></span></pre>
<!--CRLF--></div>
</div>
以及共享视图的启动文件_Layout.cshtml
<p></p>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10px; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1"> 1:</span> @{</pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 12px; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2"> 2:</span> Layout = "~/Views/Shared/_Layout.cshtml";</pre>
<!--CRLF-->
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3"> 3:</span> }</pre>
<!--CRLF--></div>
</div>
<p><font size="2"><font face="宋体"><font size="4"><strong>十,注意事项</strong></font></font></font></p>
<p><font size="2" face="宋体">上面代码还没进行重构,源码稍后以论坛留言的形式提供,由于时间仓促写的难免有很多错,请见谅.欢迎您请继续关注下文,谢谢您的访问.</font></p>
</div>
<div class="share_buttons" id="sharePanel"></div>
<div class="article_next_prev">
<li class="prev_article">
<span>上一篇:</span><a href="http://blog.youkuaiyun.com/suzhi921/article/details/6184970">WCF4.0(一)</a></li>
<li class="next_article">
<span>下一篇:</span><a href="http://blog.youkuaiyun.com/suzhi921/article/details/6192097">一步一步学习ASP.NET MVC3 &EF Code First CTP 5&DI(二)</a></li>
</div>
</div>
<div id="ad_cen"></div>
<script type="text/javascript">
new Ad(4, 'ad_cen');
</script>
<script type="text/javascript"> var fileName = '6188768'; var commentscount = 10; var islock = false </script><script type="text/javascript" src="http://static.blog.youkuaiyun.com/scripts/comment.js"></script>
<script type="text/javascript"> new Ad(5, 'ad_bot'); </script>
本文介绍如何使用ASP.NET MVC3、Razor视图引擎、EF CodeFirst及Unity2.0创建Web应用程序。涵盖了领域模型创建、泛型仓储模式、工作单元模式的实现,并介绍了如何整合依赖注入容器Unity。




5853

被折叠的 条评论
为什么被折叠?



