zoukankan      html  css  js  c++  java
  • .NET Core使用EF Core框架

    Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。
    EF Core 可用作对象关系映射程序 (O/RM),以便于 .NET 开发人员能够使用 .NET 对象来处理数据库,这样就不必经常编写大部分数据访问代码了。core不像framwork一样可以在项目信件中直接选择ado.net实体数据模型。如下

    说简单点,就是在我们做增删改查的时候,不用再写非常繁琐的SQL语句,
    在以前,我们写完SQL语句后,查询出来的数据还要手动映射为我们的实体类。但现在,这些东西由EF来帮我们完成

    安装EF Core

    我们使用NuGet程序包来安装EF Core所需要的包
    右键项目> 管理NuGet程序包

    1. Microsoft.EntityFrameworkCore.SqlServer
    2. Microsoft.EntityFrameworkCore.Tools (EF工具包,创建实体)
      在这里插入图片描述
      在这里插入图片描述安装完成之后,我们打开程序包管理控制台
      工具>NuGet程序包管理器>程序包管理控制台
      在这里插入图片描述打开控制台后输入以下命令:
    Scaffold-DbContext -Force “Server=LAPTOP-FPRJ0F62SQLEXPRESS;Database=ShopDB;uid=sa;Password=123;” Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models/DataModels
     

    命令格式:

    Scaffold-DbContext -Force “Server=服务器名;Database=数据库名;uid=账户;Password=密码;” (EF组件名)Microsoft.EntityFrameworkCore.SqlServer -OutputDir (实体类存储位置)Models/DataModels

    执行命令后,系统会自动根据表创建实体类
    在这里插入图片描述这里系统会创建一个继承了DBConext类的ShopDBContext,这个ShopDBContext是根据你的数据库名生成的,这个类是连接数据库的桥梁

    使用EF Core增删改查

    单表查询

    这里我们创建一个asp.net mvc类型的项目
    查询数据非常简单

    1.  
      class Program
    2.  
      {
    3.  
      static void Main(string[] args)
    4.  
      {
    5.  
      GetProductList();
    6.  
      }
    7.  
      //获取所有产品
    8.  
      public static void GetProductList()
    9.  
      {
    10.  
      using (ShopDBContext db=new ShopDBContext())
    11.  
      {
    12.  
      var produces = db.Products;
    13.  
      Console.WriteLine("编号 产品名称");
    14.  
      foreach (var item in produces)
    15.  
      {
    16.  
      Console.WriteLine("{0} {1}",item.Id,item.Name);
    17.  
      }
    18.  
      }
    19.  
      }
    20.  
      }
    •  

    执行结果:
    在这里插入图片描述在这里插入图片描述
    在执行db.Products的时候,EF并不会立即去数据库查询,他是先定义好了一组SQL语句,当遇到ToList()或者是循环的时候,他才会去数据库查询数据

    插入数据

    1.  
      public static void InsertProduct()
    2.  
      {
    3.  
      using (ShopDBContext db = new ShopDBContext())
    4.  
      {
    5.  
      //实例化一个Products 类,数据库的ID是自增的,所以新增数据的时候,不需要添加ID
    6.  
      Products products = new Products()
    7.  
      {
    8.  
      Name = "C#从入门到精通"
    9.  
      };
    10.  
      //添加一行数据
    11.  
      db.Products.Add(products);
    12.  
      //只有在执行db.SaveChanges()的时候,才会去保存数据
    13.  
      //db.SaveChanges会返回受影响行数
    14.  
      int res= db.SaveChanges();
    15.  
      Console.WriteLine(res);
    16.  
      }
    17.  
       
    18.  
       
    19.  
      }
    •  

    执行结果:
    在这里插入图片描述
    在这里插入图片描述新增数据成功,新增数据的时候一定要db.SaveChanges,切记切记

    修改数据

    我们就修改下我们刚刚新增的数据
    在修改数据的时候,要先查询出数据,EF要确保数据库有这条数据才去修改

    1.  
      public static void UpdateProduct()
    2.  
      {
    3.  
      using (ShopDBContext db = new ShopDBContext())
    4.  
      {
    5.  
      //Find()可以按照ID查询数据
    6.  
      Products products = db.Products.Find(11);
    7.  
      //修改数据
    8.  
      products.Remark = "C#从入门到入坟";
    9.  
      products.Price = 30;
    10.  
      //保存数据
    11.  
      int res = db.SaveChanges();
    12.  
      Console.WriteLine(res);
    13.  
       
    14.  
      }
    15.  
      }
    •  

    在修改的时候,就不需要执行db.Products.Add();
    执行结果:
    在这里插入图片描述
    在这里插入图片描述

    删除数据

    和修改数据一样,我们要先从数据库查询出这条数据,然后在进行删除

    1.  
      public static void DeleteProduct()
    2.  
      {
    3.  
      using (ShopDBContext db = new ShopDBContext())
    4.  
      {
    5.  
      //Find()可以按照ID查询数据
    6.  
      Products products = db.Products.Find(11);
    7.  
      db.Remove(products);
    8.  
      //保存数据
    9.  
      int res = db.SaveChanges();
    10.  
      Console.WriteLine(res);
    11.  
       
    12.  
      }
    13.  
      }
    •  

    使用db.Remove(products);删除数据

    引用网址

    https://blog.csdn.net/qq_39569480/article/details/110956156

    世界再大也有尽头!
  • 相关阅读:
    高精度减法
    HDU 4460 Friend Chains
    POJ 2386 Lake Counting
    POJ 1852 Ants
    HDU 1240 Asteroids!
    SQL注入之Sqli-labs系列第三十六关(基于宽字符逃逸GET注入)和三十七关(基于宽字节逃逸的POST注入)
    SQL注入之Sqli-labs系列第三十四关(基于宽字符逃逸POST注入)和三十五关
    SQL注入之Sqli-labs系列第三十三关(基于宽字符逃逸注入)
    SQL注入之Sqli-labs系列第三十关(基于WAF防护的双引号报错注入)和三十一关
    墨者-uWSGI 漏洞复现(CVE-2018-7490)
  • 原文地址:https://www.cnblogs.com/shijiehaiyang/p/14677090.html
Copyright © 2011-2022 走看看