您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

C# 基于ef的2种简单的仓储封装 net core3.1 ---sqlserver

bubuko 2022/1/25 18:59:54 dotnet 字数 21433 阅读 1036 来源 http://www.bubuko.com/infolist-5-1.html

1配置 startUp.cs public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddCors(); services.AddDbContext<MyDbC ...

1配置

技术分享图片
startUp.cs

public void ConfigureServices(IServiceCollection services)
{
            services.AddControllers();
            services.AddCors();

            services.AddDbContext<MyDbContext>(option=> {
                option.UseSqlServer(Configuration.GetConnectionString("connection"));
            });

            //<IRepository<>, Repository<>>
            // 泛型注入
            services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
            // 非泛型注入
            services.AddScoped<IRepository, Repository>();
}
View Code
技术分享图片
DbContext
 public class MyDbContext : DbContext
    {

        public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
        {
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.Options.Extensions.LastOrDefault();

            //.UseSqlServer(Configuration.GetConnectionString("connection")
            //optionsBuilder.UseSqlServer("Data Source=blog.db");
        }

        /// <summary>
        /// OnModelCreating
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }

        public DbSet<appuserauth> appuserauth { get; set; }

    }
View Code

2.第一种实现

接口

技术分享图片
public interface IRepository<T> where T : class
    {
        /// <summary>
        ///获取仓储上下文实例
        /// </summary>
        //MyDbContext Context { get; }

        IEnumerable<T> GetConditions(Func<T, bool> predicate = null);

        T Get(Func<T, bool> predicate);

        T Get(params object[] keyValues);

        void Add(T entity);

        void AddRange(List<T> entitys);

        void Update(T entity);

        void Delete(T entity);

        void Delete(List<T> entitys);

        void SaveChanges();

    }
View Code

实现

技术分享图片
public class Repository<T> : IRepository<T> where T : class
    {

        private MyDbContext dbContext ;

        public MyDbContext Context => dbContext;

        /// <summary>
        /// 构造函数注入
        /// </summary>
        /// <param name="_dbContext"></param>
        public Repository(MyDbContext _dbContext)
        {
            dbContext = _dbContext;
        }

        public void Add(T entity)
        {
            dbContext.Add(entity);
        }

        public void AddRange(List<T> entitys)
        {
            dbContext.AddRange(entitys);
        }

        public void Update(T entity)
        {
            dbContext.Update(entity);
        }

        public void Delete(T entity)
        {
            //dbContext.Add(entity).State = EntityState.Deleted;
            dbContext.Remove(entity);
        }

        public void Delete(List<T> entitys)
        {
            //dbContext.Add(entity).State = EntityState.Deleted;
            dbContext.RemoveRange(entitys);
        }

        public T Get(Func<T, bool> predicate)
        {
            return dbContext.Set<T>().Where(predicate).FirstOrDefault();
        }

        public T Get(params object[] keyValues)
        {
            return dbContext.Find<T>(keyValues);
        }

        public IEnumerable<T> GetConditions(Func<T, bool> predicate = null)
        {
            if (predicate == null)
            {
                return dbContext.Set<T>().Where(l=>true);
            }
            return dbContext.Set<T>().Where(predicate);
        }

        public void SaveChanges()
        {
            dbContext.SaveChanges();
        }

        
    }
View Code

3.第二种实现

接口

技术分享图片
 public interface IRepository 
    {
        /// <summary>
        ///获取仓储上下文实例
        /// </summary>
        //MyDbContext Context { get; }

        IEnumerable<T> GetConditions<T>(Func<T, bool> predicate = null) where T : class;

        T Get<T>(Func<T, bool> predicate) where T : class;

        T Get<T>(params object[] keyValues) where T : class;

        void Add<T>(T entity);

        void AddRange<T>(List<T> entitys);

        void Update<T>(T entity);

        void Delete<T>(T entity);

        void Delete<T>(List<T> entitys);

        void SaveChanges();

    }
View Code

实现

技术分享图片
public class Repository : IRepository
    {

        private MyDbContext dbContext;

        public MyDbContext Context => dbContext;

        /// <summary>
        /// 构造函数注入
        /// </summary>
        /// <param name="_dbContext"></param>
        public Repository(MyDbContext _dbContext)
        {
            dbContext = _dbContext;
        }

        public void Add<T>(T entity)
        {
            dbContext.Add(entity);
        }

        public void AddRange<T>(List<T> entitys)
        {
            dbContext.AddRange(entitys);
        }

        public void Update<T>(T entity)
        {
            dbContext.Update(entity);
        }

        public void Delete<T>(T entity)
        {
            dbContext.Remove(entity);
        }

        public void Delete<T>(List<T> entitys)
        {
            dbContext.RemoveRange(entitys);
        }

        public T Get<T>(Func<T, bool> predicate) where T : class
        {
            return dbContext.Set<T>().Where(predicate).FirstOrDefault();
        }

        public T Get<T>(params object[] keyValues) where T : class
        {
            return dbContext.Find<T>(keyValues);
        }

        public IEnumerable<T> GetConditions<T>(Func<T, bool> predicate = null) where T : class
        {
            if (predicate == null)
            {
                return dbContext.Set<T>().Where(l => true);
            }
            return dbContext.Set<T>().Where(predicate);
        }

        public void SaveChanges()
        {
            dbContext.SaveChanges();
        }


    }
View Code

 

C# 基于ef的2种简单的仓储封装 net core3.1 ---sqlserver

原文:https://www.cnblogs.com/hkyyqqq/p/15030272.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶