真爱无限的知识驿站

学习积累技术经验,提升自身能力

.Net框架搭建之2、SQL Server MEF依赖注入 MVC Repository框架_part2


EFRepositoryBase.cs

using InjectExample.Model.ViewModel;
/* ==============================================================================
 * 功能描述:EFRepositoryBase  
 * 创 建 者:蒲奎民
 * 创建日期:2016-08-29 10:56:35
 * CLR Version :4.0.30319.42000
 * ==============================================================================*/
using System;
using System.Collections.Generic;
using System.Composition;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using EntityFramework.Extensions;
namespace InjectExample.Component
{
    /// <summary>
    ///     EntityFramework仓储操作基类
    /// </summary>
    /// <typeparam name="TEntity">动态实体类型</typeparam>
    public abstract class EfRepositoryBase<TEntity> : IRepository<TEntity> where TEntity : class //EntityBase<TKey>
    {
        #region 属性
        /// <summary>
        ///     获取 仓储上下文的实例
        /// </summary>
        [Import]
        public IUnitOfWork UnitOfWork { get; set; }
        /// <summary>
        ///     获取 EntityFramework的数据仓储上下文
        /// </summary>
        protected UnitOfWorkContextBase EfContext
        {
            get
            {
                if (UnitOfWork is UnitOfWorkContextBase)
                {
                    return UnitOfWork as UnitOfWorkContextBase;
                }
                return null;
                // throw new DataAccessException(string.Format("数据仓储上下文对象类型不正确,应为UnitOfWorkContextBase,实际为 {0}", UnitOfWork.GetType().Name));
            }
        }
        /// <summary>
        ///  获取 当前实体的查询数据集,不跟踪状态
        /// </summary>
        public virtual IQueryable<TEntity> Entities
        {
            get { return EfContext.Set<TEntity>().AsNoTracking(); }
        }
        /// <summary>
        /// 获取 当前实体的查询数据集,有跟踪状态
        /// </summary>
        public virtual IQueryable<TEntity> Table
        {
            get { return EfContext.Set<TEntity>(); }
        }
        #endregion
        #region 公共方法
        /// <summary>
        ///     插入实体记录
        /// </summary>
        /// <param name="entity"> 实体对象 </param>
        /// <param name="isSave"> 是否执行保存 </param>
        /// <returns> 操作影响的行数 </returns>
        public virtual int Insert(TEntity entity, bool isSave = true)
        {
            PublicHelper.CheckArgument(entity, "entity");
            EfContext.RegisterNew(entity);
            return isSave ? EfContext.Commit() : 0;
        }
        /// <summary>
        ///     批量插入实体记录集合
        /// </summary>
        /// <param name="entities"> 实体记录集合 </param>
        /// <param name="isSave"> 是否执行保存 </param>
        /// <returns> 操作影响的行数 </returns>
        public virtual int Insert(IEnumerable<TEntity> entities, bool isSave = true)
        {
            PublicHelper.CheckArgument(entities, "entities");
            EfContext.RegisterNew(entities);
            return isSave ? EfContext.Commit() : 0;
        }
        ///// <summary>
        /////     删除指定编号的记录
        ///// </summary>
        ///// <param name="id"> 实体记录编号 </param>
        ///// <param name="isSave"> 是否执行保存 </param>
        ///// <returns> 操作影响的行数 </returns>
        //public virtual int Delete(object id, bool isSave = true)
        //{
        //    PublicHelper.CheckArgument(id, "id");
        //    TEntity entity = EFContext.Set<TEntity>().Find(id);
        //    return entity != null ? Delete(entity, isSave) : 0;
        //}
        /// <summary>
        ///     删除实体记录
        /// </summary>
        /// <param name="entity"> 实体对象 </param>
        /// <param name="isSave"> 是否执行保存 </param>
        /// <returns> 操作影响的行数 </returns>
        public virtual int Delete(TEntity entity, bool isSave = true)
        {
            PublicHelper.CheckArgument(entity, "entity");
            EfContext.RegisterDeleted<TEntity>(entity);
            return isSave ? EfContext.Commit() : 0;
        }
        /// <summary>
        ///     删除实体记录集合
        /// </summary>
        /// <param name="entities"> 实体记录集合 </param>
        /// <param name="isSave"> 是否执行保存 </param>
        /// <returns> 操作影响的行数 </returns>
        public virtual int Delete(IEnumerable<TEntity> entities, bool isSave = true)
        {
            PublicHelper.CheckArgument(entities, "entities");
            EfContext.RegisterDeleted<TEntity>(entities);
            return isSave ? EfContext.Commit() : 0;
        }
        /// <summary>
        ///     删除所有符合特定表达式的数据
        /// </summary>
        /// <param name="predicate"> 查询条件谓语表达式 </param>
        /// <param name="isSave"> 是否执行保存 </param>
        /// <returns> 操作影响的行数 </returns>
        public virtual int Delete(Expression<Func<TEntity, bool>> predicate, bool isSave = true)
        {
            PublicHelper.CheckArgument(predicate, "predicate");
            List<TEntity> entities = EfContext.Set<TEntity>().Where(predicate).ToList();
            return entities.Count > 0 ? Delete(entities, isSave) : 0;
        }
        /// <summary>
        ///     更新实体记录
        /// </summary>
        /// <param name="entity"> 实体对象 </param>
        /// <param name="isSave"> 是否执行保存 </param>
        /// <returns> 操作影响的行数 </returns>
        public virtual int Update(TEntity entity, bool isSave = true)
        {
            PublicHelper.CheckArgument(entity, "entity");
            EfContext.RegisterModified<TEntity>(entity);
            return isSave ? EfContext.Commit() : 0;
        }
        public virtual int Update(IEnumerable<TEntity> entities, bool isSave = true)
        {
            PublicHelper.CheckArgument(entities, "entities");
            EfContext.RegisterModified<TEntity>(entities);
            return isSave ? EfContext.Commit() : 0;
        }
        /// <summary>
        /// 提交更新
        /// </summary>
        /// <returns></returns>
        public virtual int Commit(bool validateOnSaveEnabled = true)
        {
            return EfContext.Commit(validateOnSaveEnabled);
        }
        /// <summary>
        ///     查找指定主键的实体记录
        /// </summary>
 &nbs

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

Copyright 2024-2027 pukuimin Rights Reserved.
粤ICP备17100155号