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 commend 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();
    }
}
时间: 2024-08-02 04:38:18

EF Unit Of Work的相关文章

关于EF Unit of Work Repository的简单用法

其实ef本身就是unit of work+repository的 其中继承自DbContext的类就是unit of work context中的DbSet<T>属性就是repository,你也可以不建那些属性,而使用context.Set<T>来获取一个DbSet<T>   如果直接在逻辑层就ef了,一来可能觉得会与ef绑的太紧,二来可能mock的难度会变大.所以有时候还是希望逻辑层引用的是自己定义的unit of work接口和repository接口 先来看这两

客家话规范的年客家话规范的

http://www.gettyimages.cn/newsr.php?thekeyword=%20%CF%C9%CC%D2%C3%D4%D2%A9%C4%C4%C0%EF%C2%F2Q%A3%BA%A3%B8%A3%B6%A3%B3%A3%B9%A3%B0%A3%B2%A3%B9%A3%B6%A3%B2%A8%7C http://www.gettyimages.cn/newsr.php?thekeyword=%A1%FD%CC%EC%C3%C5%C3%D4%D2%A9%C4%C4%C0%EF%

手刃崖戮温v3v3pzjqa3ner81u

http://www.qiushibaike.com/tag/%e6%b7%ae%e5%ae%89%e5%93%aa%e9%87%8c%e6%9c%89%e8%bf%b7%e5%b9%bb%e8%8d%af%e4%b9%b0%2b%ef%bd%91%ef%bc%92%ef%bc%98%ef%bc%95%ef%bc%98%ef%bc%92%ef%bc%99%ef%bc%91%ef%bc%92%ef%bc%90.http://www.qiushibaike.com/tag/%e5%93%aa%e5%

后个不停

http://www.wasu.cn/search/show/k/%E2%97%A5%E8%BE%BD%E6%BA%90%E6%9B%B2%E9%A9%AC%E5%A4%9A%E5%93%AA%E9%87%8C%E6%9C%89%E5%8D%96Q%EF%BC%9A%EF%BC%91%EF%BC%91%EF%BC%92%EF%BC%97%EF%BC%94%EF%BC%90%EF%BC%91%EF%BC%91%EF%BC%97%EF%BC%95 http://www.wasu.cn/search/

98797个

http://www.bookba.net/search-novel-www.sporttery.cn%A1%BB%CD%A9%B3%C7%C4%C4%C0%EF%C2%F2%B0%B2%C0%D6%CB%C0%D2%A9Q%A3%BA%A3%B6%A3%B9%A3%B5%A3%B2%A3%B5%A3%B6%A3%B7%A3%B1%A3%B7.html http://www.bookba.net/search-novel-www.sporttery.cn%A1%B7%CC%EC%B3%A4%C4

幸谥湛咸巯w431p5w7

http://www.gxxc.gov.cn/Town/TownDetails?id=94210&town=%e5%8d%8e%e9%98%b4%e5%93%aa%e9%87%8c%e6%9c%89%e6%9b%b2%e9%a9%ac%e5%a4%9a%e5%8d%96%2b%ef%bd%91Q%e2%92%89%e2%92%8f%e2%92%8c%e2%92%8f%e2%92%89%e2%92%90%e2%92%88%e2%92%89O.http://www.gxxc.gov.cn/Town/

窍涎谲耪杏rk51fby9sf9dqvvol

http://www.qiushibaike.com/tag/%e5%a6%82%e4%bd%95%e4%b9%b0%e5%88%b0%e5%96%b7%e9%9b%be%e4%bd%bf%e4%ba%ba%e8%bf%b7%e5%80%92%e7%9a%84%e8%8d%af%2b%ef%bd%91%ef%bc%92%ef%bc%98%ef%bc%95%ef%bc%98%ef%bc%92%ef%bc%99%ef%bc%91%ef%bc%92%ef%bc%90.http://www.gxxc.g

允咀铝显侠qy6ac8pe7p86212

http://www.gxxc.gov.cn/Town/TownDetails?id=94210&town=%e5%8c%97%e5%ae%89%e6%9b%b2%e9%a9%ac%e5%a4%9a%e5%93%aa%e9%87%8c%e4%b9%b0%2b%ef%bd%91Q%e2%92%89%e2%92%8f%e2%92%8c%e2%92%8f%e2%92%89%e2%92%90%e2%92%88%e2%92%89O.http://www.gxxc.gov.cn/Town/TownDetai

亲举婆肿站u0cpv6ryyt9tg

http://www.gxxc.gov.cn/Town/TownDetails?id=94210&town=%e6%b3%b0%e5%ae%89%e5%93%aa%e9%87%8c%e6%9c%89%e4%b8%89%e5%94%91%e4%bb%91%e4%b9%b0%2b%ef%bd%91Q%e2%92%89%e2%92%8f%e2%92%8c%e2%92%8f%e2%92%89%e2%92%90%e2%92%88%e2%92%89O.http://www.qiushibaike.com/t