zoukankan      html  css  js  c++  java
  • EF三层结构加接口实现增删改查

    DbContext
      DbContext是EntityFramework很重要的部分,连接域模型与数据库的桥梁,是与数据库通信的主要类。

     

      

    DbContext主要负责以下活动:

    EntitySet::DbContext包含了所有映射到表的entities

    Querying:将Linq-To-Entities转译为Sql并发送到数据库

    Change Tracking:从数据库获取entities后保留并跟踪实体数据变化

    Persisting Data:根据entity状态执行Insert、update、delete命令

    Caching:DbContext的默认第一级缓存,在上下文中的生命周期中存储entity

    Manage Relationship:DbContext在DbFirst模式中使用CSDL、MSL、SSDL管理对象关系,Code first中使用fluent api 管理关系

    增删改查操作
     IDAL


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Linq.Expressions;
    using System.Text;
    using System.Threading.Tasks;

    namespace ADO.NETEFDemo
    {
    public interface IDAL<T> where T : class,new()
    {
    /// <summary>
    /// 增
    /// </summary>
    /// <param name="model"></param>
    /// <returns></returns>
    int Add(T model);

    /// <summary>
    /// 删
    /// </summary>
    /// <param name="whereLambda"></param>
    /// <returns></returns>
    int Delete(Expression<Func<T, bool>> whereLambda);

    /// <summary>
    /// 改
    /// </summary>
    /// <param name="whereLambda"></param>
    /// <param name="propertyNames"></param>
    /// <param name="perpertyValues"></param>
    /// <returns></returns>
    int Update(Expression<Func<T, bool>> whereLambda, string[] propertyNames, object[] perpertyValues);

    /// <summary>
    /// 查
    /// </summary>
    /// <param name="whereLambda"></param>
    /// <returns></returns>
    List<T> GetModelList(Expression<Func<T, bool>> whereLambda);
    }
    }


      DAL


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Linq.Expressions;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;

    namespace ADO.NETEFDemo
    {
    public class DAL<T> : IDAL<T> where T : class,new()
    {
    /// <summary>
    /// 增
    /// </summary>
    /// <param name="model"></param>
    /// <returns></returns>
    public int Add(T model)
    {
    using (testbakEntities db = new testbakEntities())
    {
    db.Set<T>().Add(model);
    return db.SaveChanges();
    }
    }

    /// <summary>
    /// 删
    /// </summary>
    /// <param name="whereLambda"></param>
    /// <returns></returns>
    public int Delete(Expression<Func<T, bool>> whereLambda)
    {
    using (testbakEntities db = new testbakEntities())
    {
    var dbQuery = db.Set<T>();

    //先查询 对应表的 集合
    var list = dbQuery.Where(whereLambda).ToList();

    //遍历集合 里要删除的元素
    foreach (var item in list)
    {
    //标记为 删除状态
    dbQuery.Remove(item);
    }
    return db.SaveChanges();
    }
    }

    /// <summary>
    /// 改
    /// </summary>
    /// <param name="whereLambda"></param>
    /// <param name="propertyNames"></param>
    /// <param name="perpertyValues"></param>
    /// <returns></returns>
    public int Update(Expression<Func<T, bool>> whereLambda, string[] propertyNames, object[] perpertyValues)
    {
    using (testbakEntities db = new testbakEntities())
    {
    //1、查询要修改的对象集合
    var list = db.Set<T>().Where<T>(whereLambda).ToList();

    //2、获取要修改的对象的类型
    Type t = typeof(T);

    //3、循环要修改的实体对象,并根据要修改的属性名修改对象对应的属性值
    foreach (var item in list)
    {
    //循环 要修改的属性 名称, 并 反射取出 t 中的 属性对象
    for (int index = 0; index < propertyNames.Length; index++)
    {
    //获取要修改的属性名
    string pName = propertyNames[index];

    //获取属性对象
    PropertyInfo pi = t.GetProperty(pName);

    //调用属性对象的 SetValue方法 为当前循环的 item对象 对应的属性赋值
    pi.SetValue(item, perpertyValues[index], null);
    }
    }
    return db.SaveChanges();
    }
    }

    /// <summary>
    /// 查
    /// </summary>
    /// <param name="whereLambda"></param>
    /// <returns></returns>
    public List<T> GetModelList(Expression<Func<T, bool>> whereLambda)
    {
    using (testbakEntities db = new testbakEntities())
    {
    return db.Set<T>().Where(whereLambda).ToList();
    }
    }
    }
    }


     BLL


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Linq.Expressions;
    using System.Text;
    using System.Threading.Tasks;

    namespace ADO.NETEFDemo
    {
    public static class BLL<T> where T : class,new()
    {
    private static IDAL<T> dal = new DAL<T>();

    /// <summary>
    /// 新增
    /// </summary>
    /// <param name="model"></param>
    public static int Add(T model)
    {
    return dal.Add(model);
    }

    /// <summary>
    /// 删除
    /// </summary>
    /// <param name="whereLambda"></param>
    public static int Delete(Expression<Func<T, bool>> whereLambda)
    {
    return dal.Delete(whereLambda);
    }

    /// <summary>
    /// 修改
    /// </summary>
    /// <param name="whereLambda"></param>
    /// <param name="propertyNames"></param>
    /// <param name="perpertyValues"></param>
    /// <returns></returns>
    public static int Update(Expression<Func<T, bool>> whereLambda, string[] propertyNames, object[] perpertyValues)
    {
    return dal.Update(whereLambda, propertyNames, perpertyValues);
    }

    /// <summary>
    /// 查询
    /// </summary>
    /// <param name="whereLambda"></param>
    /// <returns></returns>
    public static List<T> GetModelList(Expression<Func<T, bool>> whereLambda)
    {
    return dal.GetModelList(whereLambda);
    }
    }
    }


     调用


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

    namespace ADO.NETEFDemo
    {
    class Program
    {
    static void Main(string[] args)
    {
    GetArticleList();

    AddArticle();

    GetArticleList();

    UpdateArticle();

    GetArticleList();

    DeleteArticel();

    GetArticleList();

    Console.ReadKey();
    }

    /// <summary>
    /// 更新
    /// </summary>
    private static void UpdateArticle()
    {
    int result = BLL<t_crobot_reship_articles>
    .Update(e => e.title.Contains("EF"), new[] { "title", "update_time" },
    new object[] { "我是使用EF修改过标题的文章", DateTime.Now });
    if (result >= 0)
    {
    Console.WriteLine("更新成功");
    }
    else
    {
    Console.WriteLine("更新失败");
    }
    Console.WriteLine();
    }

    /// <summary>
    /// 删除
    /// </summary>
    private static void DeleteArticel()
    {
    int result = BLL<t_crobot_reship_articles>.Delete(e => e.title.Contains("EF"));
    if (result >= 0)
    {
    Console.WriteLine("删除成功");
    }
    else
    {
    Console.WriteLine("删除失败");
    }
    Console.WriteLine();
    }

    /// <summary>
    /// 新增
    /// </summary>
    private static void AddArticle()
    {
    t_crobot_reship_articles model = new t_crobot_reship_articles();
    model.create_time = DateTime.Now;
    model.module_id = 1;
    model.adword_id = 20;
    model.pick_id = 1;
    model.vote_id = "1";
    model.title = "我是使用EF添加的文章";
    model.content_id = 1;
    model.release_url = "http://www.sss.com";
    model.state = true;
    int result = BLL<t_crobot_reship_articles>.Add(model);
    if (result >= 0)
    {
    Console.WriteLine("新增成功");
    }
    else
    {
    Console.WriteLine("新增失败");
    }
    Console.WriteLine();
    }

    /// <summary>
    /// 获取文章列表
    /// </summary>
    private static void GetArticleList()
    {
    List<t_crobot_reship_articles> articleList = BLL<t_crobot_reship_articles>
    .GetModelList(e => e.state == true);

    Console.WriteLine("文章总数:" + articleList.Count.ToString());
    foreach (t_crobot_reship_articles model in articleList)
    {
    Console.WriteLine("标题:" + model.title);
    }

    Console.WriteLine();
    }
    }
    }


      结果
    ————————————————
    版权声明:本文为CSDN博主「有梦的小草」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/loveyourselfjiuhao/article/details/82886595

  • 相关阅读:
    GIT 基本语句
    SpringBoot查看哪些配置类自动生效
    LeetCode第一题 两数之和
    static{} java中的静态代码块
    mybatis引入mapper映射文件的4种方法(转)
    MySQL Charset/Collation(字符集/校对)(转)
    MySQL数据库的创建(详细)
    Eclipse出现Tomcat无法启动:Server Tomcat v8.5 Server at localhost failed to start问题
    判断一个int类型数字的奇偶性
    linux中安装erlang时使用make命令报错问题
  • 原文地址:https://www.cnblogs.com/qiu18359243869/p/13176707.html
Copyright © 2011-2022 走看看