EF架構~終(zhong)于自己架構了一(yi)個相對(dui)完整的(de)EF方(fang)案(an)
EF4.1學了有(you)(you)段時間(jian)了,沒有(you)(you)靜下來(lai)好(hao)好(hao)研究(jiu)它的(de)(de)架(jia)構,今天有(you)(you)空正好(hao)把它的(de)(de)架(jia)構及數據(ju)操作這段拿出來(lai),希望給大家(jia)帶來(lai)幫助,對我自己也是一種總結(jie):P
從(cong)圖中可以看到,我(wo)們用的(de)(de)是MVC3進行程(cheng)序開發的(de)(de),哈哈,也(ye)(ye)是剛開始用3.0,項(xiang)目整(zheng)體架構還(huan)是傳統三(san)層(ceng),其它(ta)公用層(ceng)我(wo)就不說了(le),服務層(ceng)和UI層(ceng)也(ye)(ye)不說了(le),單說EF還(huan)在的(de)(de)實體層(ceng)和數據層(ceng),我(wo)用EF生成器(qi)把它(ta)生成后,又整(zheng)理(li)了(le)一個(ge),因為我(wo)不想讓EF的(de)(de)低層(ceng)方(fang)法暴(bao)露(lu)給業(ye)務層(ceng).
我(wo)(wo)來(lai)一個一個的說我(wo)(wo)的方案:
OAContext.cs:這是生(sheng)成器生(sheng)成的,這不作修
RepositoryBase.cs:這是數據庫基類,里(li)面對它的子(zi)類公開了(le)一個屬性和(he)一個方法,
屬性就(jiu)是OAContext的(de)實例,而(er)方(fang)法就(jiu)是SaveChanges的(de)一個(ge)封裝(zhuang),子類可以(yi)根據自己的(de)邏輯去復寫它.
IRepository.cs:這是提供(gong)更(geng)(geng)新操作的(de)統一接口,需要(yao)有(you)更(geng)(geng)新需要(yao)的(de)子(zi)類去實現,EF的(de)統一更(geng)(geng)新我還(huan)沒有(you)想出來,哈哈
IEntityRepository.cs:這是統一的數(shu)據操(cao)(cao)作(zuo)接口(kou),除了更新之外(wai)的所有操(cao)(cao)作(zuo),統一操(cao)(cao)作(zuo)接口(kou)是一個泛型接口(kou)
EntityRepository.cs:對統一(yi)操作接口的實現
好(hao)了,下(xia)面我(wo)把源(yuan)代碼公開,大家可(ke)以看一(yi)下(xia),有好(hao)的(de)建設(she)請和我(wo)聯系(xi)!
RepositoryBase.cs
1 /// <summary> 2 3 /// 數據操作基類 4 5 /// </summary> 6 7 public abstract class RepositoryBase 8 9 { 10 11 #region 單件模式創建一個類對象 12 13 /// <summary> 14 15 /// 數據源對象 16 17 /// </summary> 18 19 private static OAContext dbContext = null; 20 21 protected static OAContext CreateInstance() 22 23 { 24 25 if (dbContext == null) 26 27 dbContext = new OAContext(); 28 29 return dbContext; 30 31 } 32 33 #endregion 34 35 36 37 public OAContext _db = CreateInstance(); 38 39 40 41 /// <summary> 42 43 /// 存儲變化 service層可能也會使用本方法,所(suo)以聲明為public 44 45 /// </summary> 46 47 public virtual void SaveChanges() 48 49 { 50 51 this._db.Configuration.ValidateOnSaveEnabled = false; 52 53 this._db.SaveChanges(); 54 55 } 56 57 }
IRepository.CS
1 /// <summary> 2 3 /// 數(shu)據操作(zuo)統(tong)一接口(更新) 4 5 /// </summary> 6 7 public interface IRepository<TEntity> where TEntity : class //這里使(shi)用(yong)泛型接口 8 9 { 10 11 /// <summary> 12 13 /// 根據數據庫實體—》更新記(ji)錄 14 15 /// </summary> 16 17 /// <param name="entity"></param> 18 19 void Update(TEntity entity); 20 21 22 23 /// <summary> 24 25 /// 根據響應的屬性名稱進行更新(xin) 26 27 /// </summary> 28 29 /// <param name="entity">要更新的實體</param> 30 31 /// <param name="enums">要響應的列枚舉</param> 32 33 void Update(TEntity entity, Enum enums); 34 35 36 37 /// <summary> 38 39 /// 根據數(shu)據庫實(shi)體—》[批量]更新(xin)記(ji)錄 40 41 /// </summary> 42 43 /// <param name="entity"></param> 44 45 void Update(IList<TEntity> list); 46 47 48 49 /// <summary> 50 51 /// 根據響應的屬性名(ming)稱進行批(pi)量(liang)更(geng)新 52 53 /// </summary> 54 55 /// <param name="list">要更新的實體IList<IDataEntity></param> 56 57 /// <param name="enums">要響應的列(lie)枚舉</param> 58 59 void Update(IList<TEntity> list, Enum enums); 60 61 }
IEntityRepository.cs
1 /// <summary> 2 3 /// 數據操作統一接口(插入(ru),查詢(xun),刪除) 4 5 /// </summary> 6 7 public interface IEntityRepository<TEntity> where TEntity : class //這里使(shi)用泛型接口 8 9 { 10 11 12 13 /// <summary> 14 15 /// 根據數(shu)據庫(ku)實體—》插(cha)入(ru)記錄 16 17 /// </summary> 18 19 void Insert(TEntity entity); 20 21 22 23 /// <summary> 24 25 /// 根(gen)據(ju)數據(ju)庫實體—》[批量]插入(ru)記(ji)錄 26 27 /// </summary> 28 29 void Insert(IList<TEntity> list); 30 31 32 33 /// <summary> 34 35 /// 刪除單條(tiao)記錄 36 37 /// </summary> 38 39 /// <param name="oArr"></param> 40 41 void Delete(TEntity entity); 42 43 44 45 /// <summary> 46 47 /// 刪除列表 48 49 /// </summary> 50 51 /// <param name="list"></param> 52 53 void Delete(IList<TEntity> list); 54 55 56 57 /// <summary> 58 59 /// 得(de)到實體列表 60 61 /// </summary> 62 63 /// <returns></returns> 64 65 DbSet<TEntity> GetList(); 66 67 }
EntityRepository.cs
1 /// <summary> 2 3 /// 數據操作實現類(統一(yi)實現類) 4 5 /// </summary> 6 7 /// <typeparam name="TEntity"></typeparam> 8 9 public class EntityRepository<TEntity> : RepositoryBase, IEntityRepository<TEntity> 10 11 where TEntity : class 12 13 { 14 15 #region IEntityRepository<TEntity> Members 16 17 18 19 public void Insert(TEntity entity) 20 21 { 22 23 this._db.Set<TEntity>().Add(entity); 24 25 this._db.Entry(entity).State = System.Data.EntityState.Added; 26 27 this.SaveChanges(); 28 29 } 30 31 32 33 public void Insert(IList<TEntity> list) 34 35 { 36 37 list.ToList().ForEach(entity => 38 39 { 40 41 this._db.Set<TEntity>().Add(entity); 42 43 this._db.Entry(entity).State = System.Data.EntityState.Added; 44 45 }); 46 47 this.SaveChanges(); 48 49 } 50 51 52 53 public void Delete(TEntity entity) 54 55 { 56 57 this._db.Set<TEntity>().Remove(entity); 58 59 this._db.Entry(entity).State = System.Data.EntityState.Deleted; 60 61 this.SaveChanges(); 62 63 } 64 65 66 67 public void Delete(IList<TEntity> list) 68 69 { 70 71 list.ToList().ForEach(entity => 72 73 { 74 75 this._db.Set<TEntity>().Remove(entity); 76 77 this._db.Entry(entity).State = System.Data.EntityState.Deleted; 78 79 }); 80 81 this.SaveChanges(); 82 83 } 84 85 86 87 public System.Data.Entity.DbSet<TEntity> GetList() 88 89 { 90 91 return this.DbSet; 92 93 } 94 95 96 97 /// <summary> 98 99 /// 泛型數據表屬性 100 101 /// </summary> 102 103 protected DbSet<TEntity> DbSet 104 105 { 106 107 get { return this._db.Set<TEntity>(); } 108 109 } 110 111 #endregion 112 113 114 115 /// <summary> 116 117 /// 操作(zuo)提(ti)交 118 119 /// </summary> 120 121 public override void SaveChanges() 122 123 { 124 125 base.SaveChanges(); 126 127 } 128 129 }