项目架构开发:数据访问层之UnitOfWork (补充)

lisansi同学回复(项目架构开发:数据访问层之UnitOfWork)要求,补上Dapper的DbContext实现

 1 using Dapper.Contrib.Extensions;
 2 using HG.Infrastructure.Common;
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Data;
 6 using System.Transactions;
 7 
 8 namespace HG.Data.Dapper
 9 {
10     public class DbContext
11     {
12         public IDbConnection Conn { get; set; }
13 
14         private Dictionary<object, Action> addEntities;
15         private Dictionary<object, Action> updateEntities;
16         private Dictionary<object, Action> deleteEntities;
17 
18         public DbContext()
19         {
20             Conn = DbConnectionFactory.CreateConnection(Enums.Core);
21 
22             addEntities = new Dictionary<object, Action>();
23             updateEntities = new Dictionary<object, Action>();
24             deleteEntities = new Dictionary<object, Action>();
25         }
26 
27         public void Add<TEntity>(TEntity entity) where TEntity : class
28         {
29             this.addEntities.Add(entity, () =>
30             {
31                 Conn.Insert<TEntity>(entity);
32             });
33         }
34 
35         public void Update<TEntity>(TEntity entity) where TEntity : class
36         {
37             this.updateEntities.Add(entity, () =>
38             {
39                 Conn.Update(entity);
40             });
41         }
42 
43         public void Delete<TEntity>(TEntity entity) where TEntity : class
44         {
45             this.deleteEntities.Add(entity, () =>
46             {
47                 Conn.Delete(entity);
48             });
49         }
50 
51         public TEntity Get<TEntity>(int id) where TEntity : class
52         {
53             return Conn.Get<TEntity>(id);
54         }
55 
56         public int SaveChanges()
57         {
58             int count = 0;
59             using (TransactionScope scope = new TransactionScope())
60             {
61                 foreach (var entity in deleteEntities.Keys)
62                 {
63                     this.deleteEntities[entity]();
64                 }
65 
66                 foreach (var entity in updateEntities.Keys)
67                 {
68                     this.updateEntities[entity]();
69                 }
70 
71                 foreach (var entity in addEntities.Keys)
72                 {
73                     this.addEntities[entity]();
74                 }
75 
76                 scope.Complete();
77 
78                 count = deleteEntities.Count + updateEntities.Count + addEntities.Count;
79 
80                 deleteEntities.Clear();
81                 updateEntities.Clear();
82                 addEntities.Clear();
83 
84                 if (Conn != null)
85                 {
86                     if (Conn.State == ConnectionState.Open)
87                     {
88                         Conn.Close();
89                     }
90 
91                    // Conn.Dispose();
92                 }
93             }
94 
95             return count;
96         }
97     }
98 }

 

UnitOfWork相应改成如下
 1 using HG.Data.Interface;
 2 using System;
 3 using System.Data;
 4 
 5 namespace HG.Data.Dapper
 6 {
 7     public class UnitOfWork : DbContext, IUnitOfWork, ICRUDUnitOfWork
 8     {
 9         public void RegisterNew<TEntity>(TEntity entity)
10             where TEntity : class
11         {
12             base.Add<TEntity>(entity);
13         }
14 
15         public void RegisterDirty<TEntity>(TEntity entity)
16             where TEntity : class
17         {
18             base.Update<TEntity>(entity);
19         }
20 
21         public void RegisterDeleted<TEntity>(TEntity entity)
22             where TEntity : class
23         {
24             base.Delete<TEntity>(entity);
25         }
26 
27         public void RegisterClean<TEntity>(TEntity entity)
28             where TEntity : class
29         { }
30 
31         //public TEntity Get<TEntity>(int id) 
32         //    where TEntity : class
33         //{
34         //    return base.Get<TEntity>(id);
35         //}
36 
37         public bool Commit()
38         {
39             return base.SaveChanges() > 0;
40         }
41 
42         public void Rollback()
43         {
44             throw new NotImplementedException();
45         }
46     }
47 }

 

posted @ 2018-01-16 14:59  ljr忒修斯之船  阅读(1503)  评论(1编辑  收藏  举报