整理的有用的一些EF的CommonDAL小封装

CommonDAL封装:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Linq.Expressions;
using System.Text;

using YX.Model;

namespace YX.BLL
{

    /// <summary>
    /// 基础 dal 类 T 对应数据泛型
    /// </summary>
    public class CommonDAL<T> : IDisposable where T : class
    {
        /// <summary>
        /// 当前上下文
        /// </summary>
        DbContext DB;

        #region 构造函数
        public CommonDAL()
        {
            //默认db为mclentities
            this.DB = DBHelper.CreateDB(ConnectionStr.ServiceEntities);
        }

        public CommonDAL(string connName)
        {
            this.DB = DBHelper.CreateDB(connName);
        }

        public CommonDAL(DbContext db)
        {
            if (db == null)
            {
                throw new ArgumentNullException("db");
            }
            this.DB = db;
        }

        #endregion

        /// <summary>
        /// 当前db
        /// </summary>
        public DbContext CurrDB
        {
            get
            {
                return this.DB;
            }
            set
            {
                this.DB = value;
            }
        }

        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="t">数据对象</param>
        /// <returns>成功否</returns>
        public bool Add(T t)
        {
            try
            {
                t = DB.Set<T>().Add(t);
                return DB.SaveChanges() > 0;
            }
            catch (Exception ex)
            {
                //添加错误日志
                Log.Logger.AddLog(ex.Message, ex);
                throw new Exception(ex.Message, ex);
            }
        }

        /// <summary>
        /// 更新
        /// </summary>
        /// <param name="t">数据对象</param>
        /// <returns>成功否</returns>
        public bool Update(T t)
        {
            try
            {
                this.DB.Entry<T>(t).State = EntityState.Modified;
                return this.DB.SaveChanges() > 0;
            }
            catch (Exception ex)
            {
                //添加错误日志
                Log.Logger.AddLog(ex.Message, ex);
                throw new Exception(ex.Message, ex);
            }
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="t">数据对象</param>
        /// <returns>成功否</returns>
        public bool Delete(T t)
        {
            try
            {
                t = DB.Set<T>().Remove(t);
                return DB.SaveChanges() > 0;
            }
            catch (Exception ex)
            {
                //添加错误日志
                Log.Logger.AddLog(ex.Message, ex);
                throw new Exception(ex.Message, ex);
            }
        }

        /// <summary>
        /// 返回query
        /// </summary>
        /// <returns>查询接口</returns>
        public IQueryable<T> GetQuery()
        {
            var query = DB.Set<T>();
            return query;
        }

        /// <summary>
        /// 根据主键查询
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        //public abstract T Get(Key id);

        /// <summary>
        /// 返回所有值
        /// </summary>
        /// <returns></returns>
        public List<T> GetAll()
        {
            var dbQuery = this.GetQuery();
            return dbQuery.ToList();
        }

        /// <summary>
        /// 释放
        /// </summary>
        public void Dispose()
        {
            this.CurrDB.Dispose();
        }
    }
}

DBHelper:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;

namespace YX.BLL
{
    /// <summary>
    /// 数据上下文创建类
    /// </summary>
    public class DBHelper
    {
        /// <summary>
        /// 创建上下文db方法
        /// </summary>
        /// <param name="connName"></param>
        /// <returns></returns>
        public static DbContext CreateDB(string connName)
        {
            return new DbContext(connName);
        }
    }
}

接下来就是在BaseBLL中去调用DAL:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;using YX.Entitys;
using YX.Model.SZR;
using YX.Log; using System.Reflection;

namespace YX.BLL.ShenZhouRong
{
    public class SZRBaseBLL : BaseBLL
    {
        /// <summary>
        /// 数据操作类
        /// </summary>
        public CommonDAL<TB_SZR_InterfaceLog> dal;

        private string _AppID = null;
        /// <summary>
        /// 当前APPID
        /// </summary>
        public string CurrentAppID
        {
            get
            {
                return this._AppID;
            }
            set
            {
                this._AppID = value;
            }
        }
/// <summary>
        /// 构造函数
        /// </summary>
        public SZRBaseBLL()
        {
            dal = new CommonDAL<TB_SZR_InterfaceLog>();
        }

        /// <summary>
        /// 按 ID 获取
        /// </summary>
        /// <param name="id">id</param>
        /// <returns>数据对象</returns>
        public TB_SZR_InterfaceLog GetSingle(int id)
        {
            return dal.GetQuery().Where(s => s.Id == id).FirstOrDefault();
        }
         public void Add()        {

Model_11 tss = new Model_11
{
CreateDate = DateTime.Now,
ERROR_CODE = ERROR_CODE,
IDNO = IDNO,
NAME = NAME,
RESULT = RESULT
};
CommonDAL<Model_11> dal = new CommonDAL<Model_11>();
return dal.Add(tss);

        }
    }
}
时间: 2024-10-09 22:46:18

整理的有用的一些EF的CommonDAL小封装的相关文章

ORM框架 EF - code first 的封装

Code first 是Microsoft Entity Framework中的一种模式,CodeFirst不会有可视化的界面来进行拖动编辑DataBase-Entity,但会以一个类来进行对数据表关系的描述,以及对所有实体类的描述,优势在于,代码更加地简洁,文件目录更加清晰,也更加便于维护. 直接用实体关系类进行操作,最后SaveChanges,无可厚非,当然可以了,但是,对于一个追求更加简便,更加抽象的程序员来说,无限的封装似乎是一种追求吧,废话不多说,这里直接上EF_Helper_DG的代

EF连接字符串小问题笔记

1.EFDbContext”不包含必需的 providerName 特性: <connectionStrings> <add name="EFDbContext" providerName="System.Data.SqlClient" connectionString="Data Source=(localdb)\v11.0;Initial Catalog=SportsStore;Integrated Security=True;Con

shell整理(32)===两个嵌套循环的小例子

(1)shell打印如下图所示的图案. shell 代码如下: #!/bin/bash echo "-" for i in `seq 9` do for x in `seq $i` do echo -n " " done echo "|" echo for y in `seq $i` do echo -n " " done echo "-" done echo "          |"

一些很有用的服务管理命令或者小脚本

探测局域网内有哪些机器 #!/bin/bash # Change base address 192.168.0 according to your network. for ip in 192.168.142.{1..255} ; do   (       ping $ip -c2 &> /dev/null ;      if [ $? -eq 0 ];      then      echo $ip is alive      fi   )&   done 一次解压多个.tar.g

老笔记整理二:网页小问题汇总

最近有一些小问题.想在这里写出来.一是方便大家排错,再是自己也整理一下. 1.很傻的小问题...参数提交方式有一个应该是form而不是from.(英语老师,我对不起你...) 2.用超链接传参数,在?后面不能有空格. 3.表单里的东西(如文本域)放完后,记得要改name(名字)和value(数值).否则在后台会报错.通常是fun.asp里 ExcuteRs里mCmd.execute出错. 4.where 语句里字符串一定要加单引号,基本都是' "  &  变量  &  "

如何在 Linux 中整理磁盘碎片

有一个神话是 linux 的磁盘从来不需要整理碎片.在大多数情况下这是真的,大多数因为是使用的是优秀的日志文件系统(ext3.4等等)来处理文件系统.然而,在一些特殊情况下,碎片仍旧会产生.如果正巧发生在你身上,解决方法很简单. 什么是磁盘碎片 文件系统会按块更新文件,如果这些块没有连成一整块而是分布在磁盘的各个角落中时,就会形成磁盘碎片.这对于 FAT 和 FAT32 文件系统而言是这样的.在 NTFS 中这种情况有所减轻,但在 Linux(extX)中却几乎不会发生.下面是原因: 在像 FA

mysql主从复制的一些东西的整理

最近给新上线的项目进行主从结构的搭建,因此整理些有用的东西出来,供作记录: 一.mysql的主从复制的应用场景: mysql主从复制有利于数据库结构的健壮性,提升访问速度和易于维护管理. 1).主从服务器互为备份 主从服务器架构的设计,可以大大的加强数据库架构的健壮性.例如:当主服务器出现问题的时候,我们可以人工或者自动的切换到从服务器继续提供服务. 这个类似于之前nfs存储数据通过inotify+rsync同步到备份的nfs非常的类似,只不过MySQL的同步方案,是其自带的工具. 2).主从服

JavaScript 开发经验整理

前言 今年接触了一个B/S的项目,总结了一些JavaScript开发经验,整理些有用的内容与大家分享. 本文会持续更新... 1.实现代码访问的控制 随着项目JavaScript代码库扩大,本应被控制在私有作用域的函数与变量将会暴漏的越来越多,这时你的全局作用域被“污染”的可能性就会越来越大.这不仅会导致命名冲突,也会为BUG提供温床.因此,我们需要编写自包含的.不透明的JavaScript代码,它不会向外界暴漏内部的细节,也不会与现有的框架与脚本库发生冲突.事实上这正是大规模编程的主要要求  

EF学习笔记(十一):实施继承

学习总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上篇链接:EF学习笔记(十) 处理并发 本篇原文链接:Implementing Inheritance 面向对象的世界里,继承可以很好的重用代码.在本章就对Instructor和Student两个类进行实施继承处理,这两个类有公用的属性,比如LastName等,也有私有的属性: 可以不用增加任何页面,进行修改一些代码,这些修改后的继承关系就会自动反应到数据库中. 通过下图可以看到两个类有哪些公用属性: 那么就可以建一个