EF 5.0 幫助類
加入命名空間:
using System; using System.Data; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Linq;
接口:
public interface IEFRepository<TEntity> where TEntity : class { bool AddEntity(TEntity entity); bool UpdateEntity(TEntity entity); bool UpdateEntity(IEnumerable<TEntity> entities); bool DeleteEntity(int ID); bool DeleteEntity(TEntity entity); bool DeleteEntity(Expression<Func<TEntity, bool>> predicate); bool DeleteEntity(IEnumerable<TEntity> entities); IList<TEntity> LoadEntities(Func<TEntity, bool> whereLambda); IList<TEntity> LoadEntities(int pageIndex = 1, int pageSize = 30, Func<TEntity, bool> whereLambda = null); TEntity FindByID(int ID); }
具體類:
//EF5.0的寫法 public class EFRepository<TEntity> : IEFRepository<TEntity> where TEntity : class { #region 單利模式 public static EFRepository<TEntity> Instance = new EFRepository<TEntity>(); public EFRepository( ) { Create(); } #endregion /// <summary> /// 獲取 當前使用的數據訪問上下文對象 /// </summary> public DbContext Context { get { return EFDbContextHelper.Context; } } public bool AddEntity(TEntity entity) { EntityState state = Context.Entry(entity).State; if (state == EntityState.Detached) { Context.Entry(entity).State = EntityState.Added; } Context.SaveChanges(); return true; } public bool UpdateEntity(TEntity entity) { Context.Set<TEntity>().Attach(entity); Context.Entry<TEntity>(entity).State = EntityState.Modified; return Context.SaveChanges() > 0; } public bool UpdateEntity(IEnumerable<TEntity> entities) { try { Context.Configuration.AutoDetectChangesEnabled = false; foreach (TEntity entity in entities) { UpdateEntity(entity); } return true; } finally { Context.Configuration.AutoDetectChangesEnabled = true; } } public bool DeleteEntity(int ID) { TEntity entity = FindByID(ID); return DeleteEntity(entity); } public bool DeleteEntity(TEntity entity) { Context.Set<TEntity>().Attach(entity); Context.Entry<TEntity>(entity).State = EntityState.Deleted; return Context.SaveChanges() > 0; } public bool DeleteEntity(System.Linq.Expressions.Expression<Func<TEntity, bool>> predicate) { List<TEntity> entities = Set().Where(predicate).ToList(); return Context.SaveChanges() > 0; } public bool DeleteEntity(IEnumerable<TEntity> entities) { try { Context.Configuration.AutoDetectChangesEnabled = false; foreach (TEntity entity in entities) { DeleteEntity(entity); } return true; } finally { Context.Configuration.AutoDetectChangesEnabled = true; } } public IList<TEntity> LoadEntities(Func<TEntity, bool> whereLambda) { if (whereLambda != null) return Context.Set<TEntity>().Where<TEntity>(whereLambda).AsQueryable().ToList(); else return Context.Set<TEntity>().AsQueryable().ToList(); } public IList<TEntity> LoadEntities(int pageIndex = 1, int pageSize = 30, Func<TEntity, bool> whereLambda = null) { int skinCount = (pageIndex - 1) * pageSize; if (whereLambda != null) return Set() .Where<TEntity>(whereLambda) .Skip(skinCount) .Take(pageSize) .ToList(); else return Set() .Skip(skinCount) .Take(pageSize) .ToList(); } public DbSet<TEntity> Set( ) { return Context.Set<TEntity>(); } public TEntity FindByID(int ID) { return Set().Find(ID); } private TEntity Create( ) { return Context.Set<TEntity>().Create(); } }
使用:
准備實體類
/// <summary> /// 實體類樓層管理 。(屬性說明自動提取數據庫字段的描述信息) /// </summary> [Serializable] public class Floor { public int ID { get; set; } [Category("樓層名稱")] public string f_Name { get; set; } [Category("備注")] public string f_Remark { get; set; } }
使用EF幫助類調用
/// <summary> /// 數據上下文 Db3983Context /// </summary> public class Db3983Context : EFDbContext { /// <summary> /// 構造函數 /// </summary> public Db3983Context() : base("3983") { } /// <summary> /// 樓層管理 /// </summary> public DbSet<Floor> Floor { get; set; } }
/// <summary> /// 應用程序的主入口點。 /// </summary> [STAThread] static void Main( ) { EFDbContextHelper.Context = new Db3983Context(); Floor floor = new Floor(); floor.f_Name = "羅敏貴"; floor.f_Remark = "我這個人看上去很靠譜,長得也很高有一米八五,也很帥氣,千萬不要迷戀哥,哥只是傳說。"; EFRepository<Floor>.Instance.AddEntity(floor); }
擴展:
其他ORM只要現實上面的接口就可以了,然后在配置文件制定使用哪個ORM就可以做到擴展了。
http://www.cnblogs.com/lori/archive/2012/10/19/2731801.html