zoukankan      html  css  js  c++  java
  • The service base of EF I am using

    using CapMon.Data;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Data.Entity;
    using System.Linq.Expressions;
    using CapMon.Utilities;
    
    namespace CapMon.Business.Base
    {
        public class ServiceBase<TObject> where TObject : class
        {
            protected CapMonEntities _context;
    
            public ServiceBase()
            {
                _context = new CapMonEntities();
            }
    
            /// <summary>
            /// The contructor requires an open DataContext to work with
            /// </summary>
            /// <param name="context">An open DataContext</param>
            public ServiceBase(CapMonEntities context)
            {
                _context = context;
            }
            /// <summary>
            /// Returns a single object with a primary key of the provided id
            /// </summary>
            /// <remarks>Synchronous</remarks>
            /// <param name="id">The primary key of the object to fetch</param>
            /// <returns>A single object with the provided primary key or null</returns>
            public TObject Get(int id)
            {
                return _context.Set<TObject>().Find(id);
            }
            /// <summary>
            /// Returns a single object with a primary key of the provided id
            /// </summary>
            /// <remarks>Asynchronous</remarks>
            /// <param name="id">The primary key of the object to fetch</param>
            /// <returns>A single object with the provided primary key or null</returns>
            public async Task<TObject> GetAsync(int id)
            {
                return await _context.Set<TObject>().FindAsync(id);
            }
            /// <summary>
            /// Gets a collection of all objects in the database
            /// </summary>
            /// <remarks>Synchronous</remarks>
            /// <returns>An ICollection of every object in the database</returns>
            public ICollection<TObject> GetAll()
            {
                return _context.Set<TObject>().ToList();
            }
            /// <summary>
            /// Gets a collection of all objects in the database
            /// </summary>
            /// <remarks>Asynchronous</remarks>
            /// <returns>An ICollection of every object in the database</returns>
            public async Task<ICollection<TObject>> GetAllAsync()
            {
                return await _context.Set<TObject>().ToListAsync();
            }
            /// <summary>
            /// Returns a single object which matches the provided expression
            /// </summary>
            /// <remarks>Synchronous</remarks>
            /// <param name="match">A Linq expression filter to find a single result</param>
            /// <returns>A single object which matches the expression filter. 
            /// If more than one object is found or if zero are found, null is returned</returns>
            public TObject Find(Expression<Func<TObject, bool>> match)
            {
                return _context.Set<TObject>().SingleOrDefault(match);
            }
            /// <summary>
            /// Returns a single object which matches the provided expression
            /// </summary>
            /// <remarks>Asynchronous</remarks>
            /// <param name="match">A Linq expression filter to find a single result</param>
            /// <returns>A single object which matches the expression filter. 
            /// If more than one object is found or if zero are found, null is returned</returns>
            public async Task<TObject> FindAsync(Expression<Func<TObject, bool>> match)
            {
                return await _context.Set<TObject>().SingleOrDefaultAsync(match);
            }
            /// <summary>
            /// Returns a collection of objects which match the provided expression
            /// </summary>
            /// <remarks>Synchronous</remarks>
            /// <param name="match">A linq expression filter to find one or more results</param>
            /// <returns>An ICollection of object which match the expression filter</returns>
            public ICollection<TObject> FindAll(Expression<Func<TObject, bool>> match)
            {
                return _context.Set<TObject>().Where(match).ToList();
            }
            /// <summary>
            /// Returns a collection of objects which match the provided expression
            /// </summary>
            /// <remarks>Asynchronous</remarks>
            /// <param name="match">A linq expression filter to find one or more results</param>
            /// <returns>An ICollection of object which match the expression filter</returns>
            public async Task<ICollection<TObject>> FindAllAsync(Expression<Func<TObject, bool>> match)
            {
                return await _context.Set<TObject>().Where(match).ToListAsync();
            }
            /// <summary>
            /// Inserts a single object to the database and commits the change
            /// </summary>
            /// <remarks>Synchronous</remarks>
            /// <param name="t">The object to insert</param>
            /// <returns>The resulting object including its primary key after the insert</returns>
            public TObject Add(TObject t)
            {
                _context.Set<TObject>().Add(t);
                _context.SaveChanges();
                return t;
            }
            /// <summary>
            /// Inserts a single object to the database and commits the change
            /// </summary>
            /// <remarks>Asynchronous</remarks>
            /// <param name="t">The object to insert</param>
            /// <returns>The resulting object including its primary key after the insert</returns>
            public async Task<TObject> AddAsync(TObject t)
            {
                _context.Set<TObject>().Add(t);
                await _context.SaveChangesAsync();
                return t;
            }
            /// <summary>
            /// Inserts a collection of objects into the database and commits the changes
            /// </summary>
            /// <remarks>Synchronous</remarks>
            /// <param name="tList">An IEnumerable list of objects to insert</param>
            /// <returns>The IEnumerable resulting list of inserted objects including the primary keys</returns>
            public IEnumerable<TObject> AddAll(IEnumerable<TObject> tList)
            {
                _context.Set<TObject>().AddRange(tList);
                _context.SaveChanges();
                return tList;
            }
            /// <summary>
            /// Inserts a collection of objects into the database and commits the changes
            /// </summary>
            /// <remarks>Asynchronous</remarks>
            /// <param name="tList">An IEnumerable list of objects to insert</param>
            /// <returns>The IEnumerable resulting list of inserted objects including the primary keys</returns>
            public async Task<IEnumerable<TObject>> AddAllAsync(IEnumerable<TObject> tList)
            {
                _context.Set<TObject>().AddRange(tList);
                await _context.SaveChangesAsync();
                return tList;
            }
            /// <summary>
            /// Updates a single object based on the provided primary key and commits the change
            /// </summary>
            /// <remarks>Synchronous</remarks>
            /// <param name="updated">The updated object to apply to the database</param>
            /// <param name="key">The primary key of the object to update</param>
            /// <returns>The resulting updated object</returns>
            public TObject Update(TObject updated, int key)
            {
                if (updated == null)
                    return null;
    
                TObject existing = _context.Set<TObject>().Find(key);
                if (existing != null)
                {
                    _context.Entry(existing).CurrentValues.SetValues(updated);
                    _context.SaveChanges();
                }
                return existing;
            }
            /// <summary>
            /// Updates a single object based on the provided primary key and commits the change
            /// </summary>
            /// <remarks>Asynchronous</remarks>
            /// <param name="updated">The updated object to apply to the database</param>
            /// <param name="key">The primary key of the object to update</param>
            /// <returns>The resulting updated object</returns>
            public async Task<TObject> UpdateAsync(TObject updated, int key)
            {
                if (updated == null)
                    return null;
    
                TObject existing = await _context.Set<TObject>().FindAsync(key);
                if (existing != null)
                {
                    _context.Entry(existing).CurrentValues.SetValues(updated);
                    await _context.SaveChangesAsync();
                }
                return existing;
            }
            /// <summary>
            /// Deletes a single object from the database and commits the change
            /// </summary>
            /// <remarks>Synchronous</remarks>
            /// <param name="t">The object to delete</param>
            public void Delete(TObject t)
            {
                _context.Set<TObject>().Remove(t);
                _context.SaveChanges();
            }
            /// <summary>
            /// Deletes a single object from the database and commits the change
            /// </summary>
            /// <remarks>Asynchronous</remarks>
            /// <param name="t">The object to delete</param>
            public async Task<int> DeleteAsync(TObject t)
            {
                _context.Set<TObject>().Remove(t);
                return await _context.SaveChangesAsync();
            }
    
            /// <summary>
            /// Gets the count of the number of objects in the databse
            /// </summary>
            /// <remarks>Synchronous</remarks>
            /// <returns>The count of the number of objects</returns>
            public int Count()
            {
                return _context.Set<TObject>().Count();
            }
            /// <summary>
            /// Gets the count of the number of objects in the databse
            /// </summary>
            /// <remarks>Asynchronous</remarks>
            /// <returns>The count of the number of objects</returns>
            public async Task<int> CountAsync()
            {
                return await _context.Set<TObject>().CountAsync();
            }
        }
    }
    

      

  • 相关阅读:
    淀粉质模板 Tree
    洛谷 P2197 【模板】nim游戏 解题报告
    洛谷 P3168 [CQOI2015]任务查询系统 解题报告
    洛谷 P2485 [SDOI2011]计算器 解题报告
    洛谷 P4883 mzf的考验 解题报告
    洛谷 P4882 lty loves 96! 解题报告
    牛客 NOIp模拟1 T1 中位数 解题报告
    牛客 NOIp模拟1 T3 保护 解题报告
    洛谷 P3349 [ZJOI2016]小星星 解题报告
    洛谷 P4139 上帝与集合的正确用法 解题报告
  • 原文地址:https://www.cnblogs.com/hualiu0/p/6898925.html
Copyright © 2011-2022 走看看