zoukankan      html  css  js  c++  java
  • EF Unit Of Work

    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

  • 相关阅读:
    什么是主从复制、读写分离、为什么要使用
    Swift 4.0 + Ipad开发项目中值得注意知识点
    Swift细节记录<一>
    ECMAScript 6复习<一>
    Swift4.0复习访问控制与作用域
    Swift4.0复习操作符方法与操作符的定制
    Swift4.0复习错误处理
    Swift4.0复习扩展
    Swift4.0复习泛型
    TCP的三次握手(建立连接)和四次挥手(关闭连接)
  • 原文地址:https://www.cnblogs.com/sgciviolence/p/5122076.html
Copyright © 2011-2022 走看看