ASP.NET MVC 3 & Unity.MVC3(2)
}
}
}
其实上面的都是引子,用 Unity 目的是进一步推迟 Repository 或者 UnitOfWork (很多时候演变成 Service 了) 的实例化时机,交给了 IoC 容器注入。以达到更灵活切换的目的,比如从 MS Entities 变换到 MySql Entities 或者是从 ObjectContext 变换到 DbContext (CodeFirst)。
下面介绍一下 Unity.MVC3 的实践过程:
1. EF CodeFirst Models
用 EF CodeFirst 创建一个 Models 工程,用来管理 Entities
表很简单,只有一个 DbSet<User>
[csharp]
namespace MvcWithUnityTest.Models
{
public class DbEntities : DbContext
{
public DbSet<User> Users { get; set; }
}
}
2. GenericRepository
主要针对 EF(ObjectContext) 和 EF CodeFirst(DbContext) 抽出接口 IRepository
[csharp]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
namespace GenericRepository
{
public interface IRepository<T> : IDisposable where T : class
{
IQueryable<T> AsQueryable();
IEnumerable<T> GetAll();
IEnumerable<T> Find(Expression<Func<T, bool>> where);
T Single(Expression<Func<T, bool>> where);
T First(Expression<Func<T, bool>> where);
void Delete(T entity);
void Add(T entity);
void Update(T entity);
}
}
DbContextRepository<T> 对应于 DbContext 的 IRepository<T> 实现,通过构造方法注入 Context 实例
[csharp]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using System.Linq.Expressions;
namespace GenericRepository
{
public class DbContextRepository<T> : IRepository<T> where T : class
{
protected DbSet<T> _objectSet;
protected DbContext _context;
相关新闻>>
- 发表评论
-
- 最新评论 更多>>