zoukankan      html  css  js  c++  java
  • 一个基于EntityFramework Core的简单数据库访问层,适用于轻量级数据库业务

    这个访问层的代码实际上是园子里某个前辈的,本人只是觉得好使,记录了下来。

    本访问层需要通过Nuget安装EntityFramework Core,不过个人认为EF 6同样可以使用。

    搭配数据库,最好是Sql Server(微软支持,你懂的)

    下面贴代码

    先是IRepository.cs

    复制代码
      public interface IRepository:IDisposable
        {    
         //获取一个表的IQuerable接口查询 IQueryable<T> All<T>() where T : class;
         //插入一条记录 void Insert<T>(T entity) where T : class;
         //根据条件,获得一条记录 T Get<T>(Expression<Func<T, bool>> conditions) where T : class;
         //传入一个前面获得的T对象,修改记录 void Update<T>(T entity) where T : class;
         //删除一条记录 void Delete<T>(T entity) where T : class;
         //保存所有更改 int SaveChanges(); }
    复制代码

    然后是实现 Repository.cs

    复制代码
      public class Repository:IRepository
        {
            private DbContext context;
    
            public Repository(DbContext dbcontext)
            {
                context = dbcontext;
            }
    
            public IQueryable<T> All<T>() where T : class
            {
                return context.Set<T>().AsNoTracking();
            }
    
            public void Insert<T>(T entity) where T : class
            {
                context.Set<T>().Add(entity);
            }
    
            public T Get<T>(Expression<Func<T, bool>> conditions) where T : class
            {
                return All<T>().FirstOrDefault(conditions);
            }
    
            public void Update<T>(T entity) where T : class
            {
                var entry = context.Entry(entity);
                if (entry.State == EntityState.Detached)
                {
                    context.Set<T>().Attach(entity);
                }
                entry.State = EntityState.Modified;
            }        
    
            public void Delete<T>(T entity) where T : class
            {
                var entry = context.Entry(entity);
                if (entry.State == EntityState.Detached)
                {
                    context.Set<T>().Attach(entity);
                }
                entry.State = EntityState.Deleted;
            }
    
    
            public int SaveChanges()
            {
                return context.SaveChanges();
            }
    
            public void Dispose()
            {
                context.Dispose();
            }
    
        }
    复制代码

    具体的使用:

    可以写一个DbFactory方法,用来生成一个数据库连接(对象)

    复制代码
      public class DbFactory
        {
           //这里可能会有数据库连接串什么的,具体情况具体应用
            public static IRepository Create()
            {
                return new Repository(new DbFactory().DbContext);
            }
        }
    复制代码

    在业务逻辑层,我们可以

    复制代码
        using(var db = DbFactory.Create())
           {
               // 这里可以是增删改的代码,
               //  例如db.Insert<User>(user);  db.Insert<UserOther>(uo);
           // 可以任意跨表,EntityFramework 自带事务,最后SaveChanges会一并处理
    int result = db.SaveChanges(); //SaveChanges()会返回一个更改数字,所以可以用一个int类型的数字来查看 结果。 }
  • 相关阅读:
    spark的map和mapPartitions
    scala 语法速查
    spark 在yarn模式下提交作业
    spark的wordcount
    spark安装
    hadoop mapreduce求解有序TopN(高效模式)
    hadoop 自定义OutputFormat
    ONI无法启动: Uh oh! Unable to launch Neovim...
    Macbook外接显示器模糊解决方法
    macOS: sudo : Operation not permitted
  • 原文地址:https://www.cnblogs.com/sjqq/p/7043793.html
Copyright © 2011-2022 走看看