(仓储模式)ASP.NET Core用EF Core用的是Microsoft.EntityFrameworkCore.SqlServer 2.0.3版本

本文主要是介绍(仓储模式)ASP.NET Core用EF Core用的是Microsoft.EntityFrameworkCore.SqlServer 2.0.3版本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 方式一:
    • 方式二

方式一:

using MatrixWebApiCore.Entity;
using Microsoft.EntityFrameworkCore;
using System; 
using System.Linq; namespace MatrixWebApiCore.Common.Data
{public class DataContext : DbContext{public DataContext(DbContextOptions<DataContext> options): base(options){ }/// <summary>/// 报告实体,执行增删改查用/// </summary>public virtual DbSet<GroupCharts> GroupCharts { get; set; }public virtual DbSet<CombinationGroupCharts> CombinationGroupCharts { get; set; }/// <summary>/// 异常日志/// </summary>public virtual DbSet<Log> Log { get; set; }        }   
}
using MatrixWebApiCore.Entity;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Linq.Expressions;namespace MatrixWebApiCore.Common.Data
{public class RepositoryBase<T> : IRepository<T> where T : BaseEntity, new(){private DataContext dbContext;private DbSet<T> dbSet;public RepositoryBase(DataContext _dbContext){dbContext = _dbContext;dbSet = dbContext.Set<T>();} public int Add(T entity){dbSet.Add(entity);return dbContext.SaveChanges();}public int Add(IEnumerable<T> entitys){foreach (var entity in entitys){dbSet.Add(entity);}return dbContext.SaveChanges();}public int Update(T entity){dbSet.Attach(entity);dbContext.Entry(entity).State = EntityState.Modified;return dbContext.SaveChanges();}public int Update(IEnumerable<T> entitys){foreach (var entity in entitys){dbSet.Attach(entity);dbContext.Entry(entity).State = EntityState.Modified;}return dbContext.SaveChanges();}public int Delete(T entity){dbSet.Attach(entity);dbSet.Remove(entity);return dbContext.SaveChanges();}public int Delete(Expression<Func<T, bool>> where){var entitys = this.GetList(where);foreach (var entity in entitys){dbSet.Remove(entity);}return dbContext.SaveChanges();}public T Get(Expression<Func<T, bool>> where){return dbSet.Where(where).FirstOrDefault();}public IQueryable<T> GetList(Expression<Func<T, bool>> where){return dbSet.Where(where);}public IQueryable<T> GetQuery(){return dbSet;}public IQueryable<T> GetQuery(Expression<Func<T, bool>> where){return dbSet.Where(where);}public IQueryable<T> GetAll(){return dbSet.AsParallel().AsQueryable();//return dbSet.AsQueryable();}public T GetAsNoTracking(Expression<Func<T, bool>> where){return dbSet.Where(where).AsNoTracking().FirstOrDefault();}public IQueryable<T> GetManyAsNoTracking(Expression<Func<T, bool>> where){return dbSet.AsNoTracking().Where(where);}public IQueryable<T> GetAllAsNoTracking(){return dbSet.AsNoTracking();}public bool Any(Expression<Func<T, bool>> @where){return dbSet.Any(where);}public int Count(Expression<Func<T, bool>> @where){return dbSet.Count(where);}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;namespace MatrixWebApiCore.Common.Data
{public interface IRepository<T> where T : class{   int Add(T entity);int Add(IEnumerable<T> entitys);int Update(T entity);int Delete(T entity);       int Delete(Expression<Func<T, bool>> where);T Get(Expression<Func<T, bool>> where);IQueryable<T> GetList(Expression<Func<T, bool>> where);IQueryable<T> GetQuery(); IQueryable<T> GetQuery(Expression<Func<T, bool>> where);        IQueryable<T> GetAll();T GetAsNoTracking(Expression<Func<T, bool>> where);IQueryable<T> GetManyAsNoTracking(Expression<Func<T, bool>> where);       IQueryable<T> GetAllAsNoTracking();/// <summary>/// 检查是否存在/// </summary>/// <param name="where"></param>/// <returns></returns>bool Any(Expression<Func<T, bool>> where);int Count(Expression<Func<T, bool>> where);}
}
public interface IGroupChartsRepository :  IRepository<GroupCharts>
{ 
}public class GroupChartsRepository : RepositoryBase<GroupCharts>, IGroupChartsRepository
{public GroupChartsRepository(DataContext db) : base(db){ }
}[Produces("application/json")]
[Route("api/[controller]")]
public class ChartDataController : Controller
{private IGroupChartsRepository _group;public ChartDataController(IGroupChartsRepository group){_group = group;		 }[HttpPost("Delete")]public async Task<ActionResult> DeleteSavedReport([FromBody]BaseRequest parames){return await Task.Run(() =>{_group.Delete(w => w.Id == parames.Guid);}}}	

在Startup.cs注册服务


public void ConfigureServices(IServiceCollection services)
{string sqlConnection ="连接字符串";services.AddDbContext<DataContext>(option => option.UseSqlServer(sqlConnection));services.AddScoped<IGroupChartsRepository, GroupChartsRepository>();	//services.AddScoped<ILogRepository, LogRepository>(); //services.AddSingleton<CombinationWebClientData>();services.BuildServiceProvider();          //支持跨域services.AddCors();//注册内存缓存services.AddMemoryCache();//services.AddResponseCaching();services.AddMvcCore(options =>{//全局异常过滤器options.Filters.Add<ExceptionFilter>();//options.CacheProfiles.Add("test1", new CacheProfile());})//services.AddMvc().AddJsonFormatters()//配置返回json格式数据,不然会报错.AddApiExplorer()//全局配置Json序列化处理.AddJsonOptions(options =>{//忽略循环引用options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;//不使用驼峰样式的keyoptions.SerializerSettings.ContractResolver = new DefaultContractResolver();//设置时间格式options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";});
}

方式二

DataContext有区别,Repository有区别,然后是Startup.cs里面不用写这行代码:

services.AddDbContext<DataContext>(option => option.UseSqlServer(sqlConnection));

其他的写法和上面一模一样,这个注册服务要写:

services.AddScoped<IGroupChartsRepository, GroupChartsRepository>();
using MatrixWebApiCore.Entity;
using Microsoft.EntityFrameworkCore;
using System; 
using System.Linq; namespace MatrixWebApiCore.Common.Data
{public class DataContext : DbContext{  protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){optionsBuilder.UseSqlServer("连接字符串");//optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;");}/// <summary>/// 报告实体,执行增删改查用/// </summary>public virtual DbSet<GroupCharts> GroupCharts { get; set; }public virtual DbSet<CombinationGroupCharts> CombinationGroupCharts { get; set; }/// <summary>/// 异常日志/// </summary>public virtual DbSet<Log> Log { get; set; }        }   
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;namespace MatrixWebApiCore.Common.Data
{public interface IRepository<T> where T : class{DataContext GetDataContext { get; }int Add(T entity);int Add(IEnumerable<T> entitys);int Update(T entity);int Delete(T entity);       int Delete(Expression<Func<T, bool>> where);T Get(Expression<Func<T, bool>> where);IQueryable<T> GetList(Expression<Func<T, bool>> where);IQueryable<T> GetQuery(); IQueryable<T> GetQuery(Expression<Func<T, bool>> where);        IQueryable<T> GetAll();T GetAsNoTracking(Expression<Func<T, bool>> where);IQueryable<T> GetManyAsNoTracking(Expression<Func<T, bool>> where);       IQueryable<T> GetAllAsNoTracking();/// <summary>/// 检查是否存在/// </summary>/// <param name="where"></param>/// <returns></returns>bool Any(Expression<Func<T, bool>> where);int Count(Expression<Func<T, bool>> where);}
}
using MatrixWebApiCore.Entity;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Linq.Expressions;namespace MatrixWebApiCore.Common.Data
{public class RepositoryBase<T> : IRepository<T> where T : BaseEntity, new(){ private DataContext dbContext;private DbSet<T> dbSet;public DataContext GetDataContext { get { return dbContext; } }public RepositoryBase(){dbContext = new DataContext();dbSet = dbContext.Set<T>();}public int Add(T entity){dbSet.Add(entity);return dbContext.SaveChanges();}public int Add(IEnumerable<T> entitys){foreach (var entity in entitys){dbSet.Add(entity);}return dbContext.SaveChanges();}public int Update(T entity){dbSet.Attach(entity);dbContext.Entry(entity).State = EntityState.Modified;return dbContext.SaveChanges();}public int Update(IEnumerable<T> entitys){foreach (var entity in entitys){dbSet.Attach(entity);dbContext.Entry(entity).State = EntityState.Modified;}return dbContext.SaveChanges();}public int Delete(T entity){dbSet.Attach(entity);dbSet.Remove(entity);return dbContext.SaveChanges();}public int Delete(Expression<Func<T, bool>> where){var entitys = this.GetList(where);foreach (var entity in entitys){dbSet.Remove(entity);}return dbContext.SaveChanges();}public T Get(Expression<Func<T, bool>> where){return dbSet.Where(where).FirstOrDefault();}public IQueryable<T> GetList(Expression<Func<T, bool>> where){return dbSet.Where(where);}public IQueryable<T> GetQuery(){return dbSet;}public IQueryable<T> GetQuery(Expression<Func<T, bool>> where){return dbSet.Where(where);}public IQueryable<T> GetAll(){return dbSet.AsParallel().AsQueryable();//return dbSet.AsQueryable();}public T GetAsNoTracking(Expression<Func<T, bool>> where){return dbSet.Where(where).AsNoTracking().FirstOrDefault();}public IQueryable<T> GetManyAsNoTracking(Expression<Func<T, bool>> where){return dbSet.AsNoTracking().Where(where);}public IQueryable<T> GetAllAsNoTracking(){return dbSet.AsNoTracking();}public bool Any(Expression<Func<T, bool>> @where){return dbSet.Any(where);}public int Count(Expression<Func<T, bool>> @where){return dbSet.Count(where);}}
}
public class GroupChartsRepository : RepositoryBase<GroupCharts>, IGroupChartsRepository
{       
}

这篇关于(仓储模式)ASP.NET Core用EF Core用的是Microsoft.EntityFrameworkCore.SqlServer 2.0.3版本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1047917

相关文章

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySql死锁怎么排查的方法实现

《MySql死锁怎么排查的方法实现》本文主要介绍了MySql死锁怎么排查的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言一、死锁排查方法1. 查看死锁日志方法 1:启用死锁日志输出方法 2:检查 mysql 错误

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

MySQL修改密码的四种实现方式

《MySQL修改密码的四种实现方式》文章主要介绍了如何使用命令行工具修改MySQL密码,包括使用`setpassword`命令和`mysqladmin`命令,此外,还详细描述了忘记密码时的处理方法,包... 目录mysql修改密码四种方式一、set password命令二、使用mysqladmin三、修改u

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

SQL Server数据库迁移到MySQL的完整指南

《SQLServer数据库迁移到MySQL的完整指南》在企业应用开发中,数据库迁移是一个常见的需求,随着业务的发展,企业可能会从SQLServer转向MySQL,原因可能是成本、性能、跨平台兼容性等... 目录一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据二、迁移工具的选择2.1

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查