MVC+LINQToSQL的Repository模式之(三)Repository模式实现统一CURD操作,实现EF中的Find主键查找

简介:
namespace Data.TEST
{
    /// <summary>
    /// 数据通用操作实现
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
    public class Repository<TEntity> : TESTRepositoryBase, IRepository<TEntity> where TEntity : class,IEntity
    {
        #region IRepository<TEntity> 成员

        public void Update(TEntity entity)
        {
            TEntity originalEntity = this.Find(entity.PrimaryKey);
            EmitMapper.ObjectMapperManager.DefaultInstance.GetMapper<TEntity, TEntity>().Map(entity, originalEntity);
            base.SubmitChanges();
        }

        public void Update(IList<TEntity> list)
        {
            TEntity originalEntity = null;
            list.ToList().ForEach(entity =>
            {
                originalEntity = this.Find(entity.PrimaryKey);
                EmitMapper.ObjectMapperManager.DefaultInstance.GetMapper<TEntity, TEntity>().Map(entity, originalEntity);
            });
            base.SubmitChanges();
        }

        public void Insert(TEntity entity)
        {
            this._db.GetTable<TEntity>().InsertOnSubmit(entity);
            base.SubmitChanges();
        }

        public void Insert(IList<TEntity> list)
        {
            list.ToList().ForEach(entity =>
            {
                this._db.GetTable<TEntity>().InsertOnSubmit(entity);
            });
            base.SubmitChanges();
        }

        public TEntity InsertGetIDENTITY(TEntity entity)
        {
            this._db.GetTable<TEntity>().InsertOnSubmit(entity);
            base.SubmitChanges();
            return this.Find(entity.PrimaryKey);
        }

        public void Delete(TEntity entity)
        {
            this._db.GetTable<TEntity>().DeleteOnSubmit(entity);
            base.SubmitChanges();
        }

        public IQueryable<TEntity> GetModel()
        {
            this._db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, this.DbSet);//解决频繁刷新数据问题
            return this.DbSet;
        }

        public TEntity Find(params object[] keyValues)
        {
            var mapping = _db.Mapping.GetTable(typeof(TEntity));
            var keys = mapping.RowType.IdentityMembers.Select((m, i) => m.Name + " = @" + i).ToArray();
            return this.DbSet.Where(String.Join(" && ", keys), keyValues).FirstOrDefault();
        }

        /// <summary>
        /// 泛型数据表属性
        /// </summary>
        private IQueryable<TEntity> DbSet
        {

            get
            {
                return this._db.GetTable<TEntity>();
            }

        }
        #endregion
    }
}

 本文转自博客园张占岭(仓储大叔)的博客,原文链接:MVC+LINQToSQL的Repository模式之(三)Repository模式实现统一CURD操作,实现EF中的Find主键查找,如需转载请自行联系原博主。

目录
相关文章
|
5月前
|
设计模式 存储 前端开发
MVVM、MVC、MVP三种常见软件架构设计模式的区别
MVC、MVP 和 MVVM 是三种常见的软件架构设计模式,主要通过分离关注点的方式来组织代码结构,优化开发效率。
128 12
|
28天前
|
存储 前端开发 测试技术
MVC、MVP、MVVM 模式
MVC、MVP 和 MVVM 是三种常见的软件架构模式,用于分离用户界面和业务逻辑。MVC(Model-View-Controller)通过模型、视图和控制器分离数据、界面和控制逻辑;MVP(Model-View-Presenter)将控制逻辑移到 Presenter 中,减少视图的负担;MVVM(Model-View-ViewModel)通过数据绑定机制进一步解耦视图和模型,提高代码的可维护性和测试性。
|
5月前
|
设计模式 存储 前端开发
MVC(Model-View-Controller)是一种软件设计模式,用于将应用程序的输入逻辑、业务逻辑和用户界面逻辑分离
【6月更文挑战第17天】**MVC模式**是软件设计模式,用于分离输入逻辑、业务逻辑和用户界面。模型处理数据和业务,视图展示数据,控制器协调两者响应用户请求。优点包括:关注点分离、提高开发效率、简化测试、支持多视图及便于大型项目管理。
52 3
|
2月前
|
设计模式 开发框架 前端开发
MVC 模式在 C# 中的应用
MVC(Model-View-Controller)模式是广泛应用于Web应用程序开发的设计模式,将应用分为模型(存储数据及逻辑)、视图(展示数据给用户)和控制器(处理用户输入并控制模型与视图交互)三部分,有助于管理复杂应用并提高代码可读性和维护性。在C#中,ASP.NET MVC框架常用于构建基于MVC模式的Web应用,通过定义模型、控制器和视图,实现结构清晰且易维护的应用程序。
52 2
|
1月前
|
前端开发 Java
【案例+源码】详解MVC框架模式及其应用
【案例+源码】详解MVC框架模式及其应用
66 0
|
2月前
|
前端开发 测试技术 开发者
MVC模式在现代Web开发中有哪些优势和局限性?
MVC模式在现代Web开发中有哪些优势和局限性?
|
2月前
|
设计模式 前端开发 PHP
PHP中实现简易的MVC模式
【8月更文挑战第31天】 本文将引导你了解如何在PHP中应用MVC(Model-View-Controller)架构模式,通过一个简单的例子展示其实现过程。我们将从基础的概念出发,逐步深入到代码实践,最终让你能够自己动手构建一个简易的MVC框架。文章不仅提供理论知识,还包含具体的代码示例,帮助你更好地理解并运用MVC模式。
|
5月前
|
存储 前端开发 数据库
MVC模式和三层架构
MVC模式和三层架构
62 2
|
6月前
|
前端开发 JavaScript 中间件
基于最新koa的Node.js后端API架构与MVC模式
基于最新koa的Node.js后端API架构与MVC模式
128 1
|
5月前
|
设计模式 前端开发 Java
mvc模式详解
mvc模式详解
下一篇
无影云桌面