一个基于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类型的数字来查看 结果。
            }        
时间: 2024-10-22 03:46:43

一个基于EntityFramework Core的简单数据库访问层,适用于轻量级数据库业务的相关文章

Java 数据库访问层

最近项目中需要对mysql进行操作,数据库的知识早在本科毕业那会就忘光了,这几年开发都没接触到数据库的操作. 借这个机会重新学习,数据库访问层是对数据库操作的一个封装,屏蔽底层的数据操作细节,通过使用DAO对数据库进行增删改查操作. 本文将以项目中的一小部分为例,介绍如何编写数据库访问层: 1. 实体类对象 1 public class CheckInfo { 2 private Integer id; 3 private String userName; 4 private Timestamp

一个基于AIO实现的简单web服务器

一下是一个基于AIO实现的简单web服务器,这是一个简单例子 /** * 一个简单的web 服务器<br/> * 通过浏览器输入localhost:8080/访问 * * @author Joeson * @since 2014/05 * */ public class AioServer implements Runnable { private AsynchronousChannelGroup asyncChannelGroup; private AsynchronousServerSoc

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这篇博客我们继续来实现我的权限系列,这个博客一段时间也没有写了,重点是我在想还写不写,最终我决定还是写下去,因为我们是为了学习,当别人提出意见的时候,我们可以参考和采纳,但是我们不一定非要采纳,上几篇博客大家都说用CodeFirst来实现,是啊,现在基本很少有人用我的这种方法来实现了,都是用CodeF

Zebra 教程:数据库访问层中间件

Zebra是点评内部使用的数据库访问层中间件,它具有以下的功能点: 配置集中管理,动态刷新支持读写分离.分库分表丰富的监控信息在CAT上展现其中的三个组件的功能分别是(腾云科技ty300.com): zebra-api : 最主要的访问层中间件(勤快学qkxue.net)zebra-ds-monitor-client:基于CAT的监控(可选)zebra-dao:基于MyBatis的异步化的DAO组件(可选)编译1. git clone https://github.com/dianping/ze

数据库访问层一

entity(实体类): /** *seralizable序列化 * / public class Mas implements Serializable{ /**  * 私有化属性  */ private static final long serialVersionUID = 1L; private int id; private String loginid; private String password; public Mas(){   }  public int getId() { 

随机获得MySQL数据库中100条数据方法 驾照题库项目 MVC架构 biz业务层的实现类 根据考试类型rand或order通过dao数据访问层接口得到数据库中100或全部数据

package com.swift.jztk.biz; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Random; import com.google.gson.Gson; import com.swift.jztk.bean.Result

一个基于nginx的HLS简单服务器搭建

一,首先搭建nginx服务器: 1.1,选定源码目录 选定目录 /usr/local/HLS cd /usr/local/HLS 1.2,安装PCRE库 cd /usr/local/HLS 到www.pcre.org 下载pcre-8.37.tar.gz , 然后拷贝到/usr/local/HLS tar -zxvf pcre-8.37.tar.gz cd pcre-8.37 ./configure make make install 1.3,安装zlib库 cd /usr/local/HLS

一个基于注解的orm简单实现(二):实现思路

先来看一段常见的数据库操作代码: ``` protected User getDataFromDatabase(long id){ String sql = "select firstname from user where id=?";//1 Connection conn = DBConnectionFactory.getConnection(); PreparedStatement stat; User user;//2 try { stat = conn.prepareStat

c#数据库访问服务(综合数据库操作)

前面给大家说封装了常用的数据库,并且整理了使用.最近我再次把项目整合了.做成比较完善的服务. 还是重复的说下数据库操作封装. berkeley db数据库,Redis数据库,sqlite数据库. 每个数据库操作封装各一个项目.可以单独使用.可以复制代码使用. 这里说明下这个服务的内容. .NET Core实现 服务端提供多种数据库,将常用数据库封装.NetCSDB.dll是控制台服务.启动即可. 客户端有测试,已经封装了客户端使用. 1.采用ZMQ的TCP通信2.服务端由配置文件设置IP和端口.