BaseEntity, 所有的业务表都继承这个类,每个表的主键都是GUID, 主键名Id.
public abstract class BaseEntity{ public BaseEntity() { this.Id = Guid.NewGuid(); } public vritual Guid Id{get;set;} }
Student, 例子类
public Student:BaseEntity { public Name {get;set;} }
StudentContext
public class StudentContext : DbContext { public DbSet<Student> Students {get;set;} }
IRepository<T> where T :BaseEntity
public IRepository<T> where T :BaseEntity { T GetById(object Id); void Insert(T entity); void Update(T entity); void Delete(T entity); IQueryable<T> Table{get;} // other common operations ... }
EFRepository<T>
public class EFRepository<T>:IRepository<T> where T: BaseEntity { DbContext _db; public EFRepository(DbContext db) { _db = db; } // implement the operations below. GetById, Insert, Update..... }
IUnitOfwork
public interface IUnitOfWork { IRepository<Student> StudentRepository {get;set} // add other repositories below. //commit void Save(); Task SaveAsync(); }
UnitOfWork
public class UnitOfWork:IUnitOfWork { DbContext _db; public UnitOfWork( DbContext db, IRepository<Student> studentRepository){ StudentRepository =studentRepository; _db =db; } public IRepository<Student> StudentRepository {get;set} // add other repositories below. //commit public void Save() { _db.SaveChanges(); } public async Task SaveAsync() { await _db.SaveChangesAsync(); } }
ISudentService, UI 业务操作的接口和实现
public interface IStudentService { void Create(Student stud); } public class StudentService:IStudentService { IUnitOfWork _uof; public StudentService(IUnitOfWork uof) { _uof = uof; } pubilc void Create(Student stud) { _uof.StudentRepository.Insert(stud); _uof.Save(); } }
http://files.cnblogs.com/files/sgciviolence/RightManager.zip