Public Abstract classBaseservice<t>whereT:class{ Private Static ReadOnlyDatabasecontext db =NewDatabasecontext (); Public StaticT Add (t entity) {db. Entry<T> (entity). State =entitystate.added; Db. SaveChanges (); returnentity; } Public Static intCount (Expression<func<t,BOOL>>predicate) { returnDb. Set<t>(). Count (predicate); } Public Static BOOLUpdate (T entity) {db. Set<T>(). Attach (entity); Db. Entry<T> (entity). State =entitystate.modified; returnDb. SaveChanges () >0; } Public Static BOOLDelete (T entiry) {db. Set<T>(). Attach (Entiry); Db. Entry<T> (Entiry). State =entitystate.deleted; returnDb. SaveChanges () >0; } Public Static BOOLExist (Expression<func<t,BOOL>>predicate) { returnDb. Set<t>(). any (predicate); } Public StaticT Find (Expression<func<t,BOOL>>predicate) { returnDb. Set<t>(). FirstOrDefault (predicate); } Public StaticIqueryable<t> Findlist (Expression<func<t,BOOL>> predicate,intPageIndex,intPageSize,intTotalparamsorderfieldmodel[] orderbyexpression) { varquery = db. Set<t>(). Where (predicate); varparameter = Expression.parameter (typeof(T),"o"); if(Orderbyexpression! =NULL&& orderbyexpression.length >0) { foreach(varOrderFieldinchorderbyexpression) { varproperty =typeof(T). GetProperty (Orderfield.propertyname); varPropertyaccess =expression.makememberaccess (parameter, property); varOrderbyexp =Expression.lambda (propertyaccess, parameter); stringOrdername = Orderfield.isdesc?"orderbydescending":" by"; Methodcallexpression Resultexp= Expression.call (typeof(queryable), Ordername,NewType[] {typeof(T), property. PropertyType}, query. Expression, Expression.quote (orderbyexp)); Query= Query. Provider.createquery<t>(RESULTEXP); } } returnDb. Set<t>(). Where (predicate); }}
Entity Framework public class