C# EF操作类

Repository.cs
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Data;
  5 using System.Data.Entity;
  6 using Models;
  7 using System.Linq.Expressions;
  8 using System.Reflection;
  9 using System.Web;
 10 using System.Data.OracleClient;
 11 
 12 namespace DAL
 13 {
 14     public class SortExpression<TEntity, TType>
 15     {
 16         Expression<Func<TEntity, TType>> SortProperty;
 17     }
 18 
 19     public class GenericRepository<TEntity> where TEntity : class
 20     {
 21         private Pub p_function = new Pub();
 22 
 23         internal LrBid context;
 24         internal DbSet<TEntity> dbSet;
 25 
 26         public GenericRepository(LrBid context)
 27         {
 28             this.context = context;
 29             this.dbSet = context.Set<TEntity>();
 30         }
 31 
 32         public virtual IEnumerable<TEntity> Get(
 33             Expression<Func<TEntity, bool>> filter = null,
 34             Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
 35             string includeProperties = "")
 36         {
 37             IQueryable<TEntity> query = dbSet;
 38 
 39             if (filter != null)
 40             {
 41                 query = query.Where(filter);
 42             }
 43 
 44             foreach (var includeProperty in includeProperties.Split
 45                 (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
 46             {
 47                 query = query.Include(includeProperty);
 48             }
 49 
 50             if (orderBy != null)
 51             {
 52                 return orderBy(query).ToList();
 53             }
 54             else
 55             {
 56                 return query.ToList();
 57             }
 58         }
 59 
 60         public virtual TEntity GetByID(object id)
 61         {
 62             return dbSet.Find(id);
 63         }
 64 
 65         public virtual void Insert(TEntity entity)
 66         {
 67                         dbSet.Add(entity);
 68         }
 69 
 70         public virtual void Delete(object id)
 71         {
 72             TEntity entityToDelete = dbSet.Find(id);
 73             Delete(entityToDelete);
 74         }
 75 
 76         public virtual void Delete(TEntity entityToDelete)
 77         {
 78             if (context.Entry(entityToDelete).State == EntityState.Detached)
 79             {
 80                 dbSet.Attach(entityToDelete);
 81             }
 82             dbSet.Remove(entityToDelete);
 83         }
 84 
 85         public virtual void Update(TEntity entityToUpdate)
 86         {
 87              dbSet.Attach(entityToUpdate);
 88             context.Entry(entityToUpdate).State = EntityState.Modified;
 89         }
 90 
 91         
 92         /// <summary>
 93         /// 有跟踪状态
 94         /// </summary>
 95         /// <param name="query">SQL查询语句,注意ORCALE参数以:为标记,MS SQL以@为标记</param>
 96         /// <param name="parameters">参数</param>
 97         /// <returns></returns>
 98         public virtual IEnumerable<TEntity> GetWithRawSql(string query, params object[] parameters)
 99         {
100             return dbSet.SqlQuery(query, parameters).ToList();
101         }
102 
103         //
104         /// <summary>
105         /// 没有跟踪状态
106         /// </summary>
107         /// <param name="query"></param>
108         /// <param name="parameters"></param>
109         /// <returns></returns>
110         public virtual IEnumerable<TEntity> GetwhithdbSql(string query, params object[] parameters) 
111         { 
112             return context.Database.SqlQuery<TEntity>(query, parameters); 
113         }
114 
115         /// <summary>
116         /// 获取单行数据,多用于统计
117         /// </summary>
118         /// <param name="query"></param>
119         /// <param name="parameters"></param>
120         /// <returns></returns>
121         public virtual TEntity GetwhithdbSqlSingle(string query, params object[] parameters)
122         {
123             return context.Database.SqlQuery<TEntity>(query, parameters).FirstOrDefault();
124         }
125 
126    }
127 }
UnitOfWork.cs
 1 using System;
 2 using Models;
 3 
 4 namespace DAL
 5 {
 6     public class UnitOfWork : IDisposable
 7     {
 8       
 9                //T_ATTACHMENT 
10         private GenericRepository<T_ATTACHMENT> t_attachment_Repository;
11 
12         public GenericRepository<T_ATTACHMENT> T_ATTACHMENT_Repository
13         {
14             get
15             {
16 
17                 if (this.t_attachment_Repository == null)
18                 {
19                     this.t_attachment_Repository = new GenericRepository<T_ATTACHMENT>(context);
20                 }
21                 return t_attachment_Repository;
22             }
23         }
24 
25  public void Save()
26         {
27             context.SaveChanges();
28         }
29 
30         private bool disposed = false;
31 
32         protected virtual void Dispose(bool disposing)
33         {
34             if (!this.disposed)
35             {
36                 if (disposing)
37                 {
38                     context.Dispose();
39                 }
40             }
41             this.disposed = true;
42         }
43 
44         public void Dispose()
45         {
46             Dispose(true);
47             GC.SuppressFinalize(this);
48         }
49 
50      }
51 }  

 

posted @ 2012-10-12 11:51  ミ茹此茹此↘  Views(911)  Comments(1Edit  收藏  举报