Entity Framework Core (EF Core) 介绍

EF Core 是Microsoft 提供的最新版本的 Entity Framework。 作为 Microsoft .NET Core 框架的一部分。 它支持跨平台开发,支持Mysql,SqlServer等。使用起来也是非常的方便,跟原来的版本比起来,性能方面也有所提高。

EF Core 是一个对象关系映射器 ( object-relational mapper ORM)。 对象关系映射是一种技术,通过执行在应用程序编程语言中定义的对象和存储在关系数据源中的数据之间进行映射所需的工作,开发人员能够以面向对象的方式处理数据。 原来我们需要写sql来进行数据库的CRUD (创建,取回,更新,删除),通过ORM 我们不需要这样做了。

为什么使用ORM

大部分语言都可以通过类似记录集的方式访问关系数据库中的数据的库。 以下代码示例说明了从数据库中检索数据并将其存储在 ADO.NET DataTable 中以便程序代码可以访问数据的典型场景:

using(var conn = new SqlConnection(connectionString))
using(var cmd = new SqlCommand("select * from Products", conn))
{
    var dt = new DataTable();
    using(var da = new SqlDataAdapter(cmd))
    {
        da.Fill(dt);
    }
}
//在.net刚开始出现的时候,我们也会用SqlDataReader的方式来读取数据

DataTable 中的数据可以通过数字或字符串索引器访问,并且需要从对象转换为正确的类型:

foreach(DataRow row in dt.Rows)
{
    int productId = Convert.ToInt32(row[0]);
    string productName = row["ProductName"].ToString();
}

这种后期绑定或“弱类型”的数据访问方法容易出错。 问题通常是由于输入错误的列名,或更改了 SQL 语句中指定字段的顺序而未对列名进行相应更改而引起的问题。 同样,对数据类型进行转换可能会失败。 但是编译期是不会报错的。,但在运行时会出错。当然相重构这种方式代码也会比较麻烦, 因此,专业开发人员更喜欢以强类型的方式处理数据。

这个代码还带来了一个好处,早期大家在写读取数据库程序的时候,偷赖采用拼接SQL的方式。这个时候如果没有处理好一些判断。就会造成SQL注入的漏洞。

强类型

当我们使用强类型的时候,我们可以定义一个Product的实体类型, 如下

public class Product
{
    public int ProductId { get; set; }
    public string ProductName { get; set; }
}
//使用的时候我们就可以用下面的方式了
var productId = myProduct.ProductId;
var productName = myProduct.ProductName;

在没有ORM的框架的时候,我们也可以使用代码生成的方式来自己生成相关的操作,(或者手写数据库层的操作)。但是随着我们的数据库变大,维护起来就会比较麻烦了。

ORM 是预先编写的代码库,可以为您完成这项工作。 功能齐全的 ORM 还可以做更多的事情。

  1. 将领域模型映射到数据库对象
  2. 根据模型的变化创建数据库并维护模式 (code first)
  3. 生成 SQL 并针对数据库执行它
  4. 管理事务
  5. 跟踪已检索的对象

SQL 注入

因为生成的查询语句都是用SQL Paramater。所以如果我们使用 EF core. 就可以不用担心SQL注入的问题了。

下面的介绍文章都是基于 .net 5.0

下一篇:安装 EF core
最近更新的
...