EF Core-2

带着问题去思考!大家好

上篇 概念性讲述CRQS(https://www.cnblogs.com/ccaa/p/12545582.html)

这篇我们主要讲在.NET CORE中的数据访问,数据访问我们常常会想到Entity Frameword Core。这是新面孔,是6.x的基础上专门设计的。

1:将其接来下的数据库访问类放到一个独立的类库中,独立起来。

2:获取连接字符串

public class MyOwnDatabase:DbContext
{
  public MyOwnDatabase(string connStringOrDbName="name=xxx"):base(connStringOrDbName)
    {
    }
}

DbContext类通过参数接受连接字符串,从web.config文件中获取连接字符串,或者appsettings.json,或者自定义XML。

3:将EF上下文与ASP.NET Core DI集成

理想的作用域是每个请求,这意味着同一个HTTP请求内的所有调用方会共享同一个实例

public void ConfigureServices(IServiceCollection services)
{
   var connString="..";
   services.AddScoped<MyOwnDatabase>(()=>new MyOwnDatabase(connString));
}

直接注入控制器或存储库

public class SomeController:Controller
{
   private readonly MyOwnDatabase _context;
   public SomeController(MyOwnDatabase  context)
    {
       _context=context;
    }
}

上面的代码段是将一个DB上下文注入一个控制器来中,不建议这种用法,会使得控制器比较臃肿/

ADO.NET适配器

在ASP.NET Core2.0中。又引用了原来的ADO.NET API的一些组件。有DataTable独享,数据读取器和数据适配器。

1:发出SQL命令

var conn=new SqlConnection();
conn.ConnectionString="...";
var cmd= new SqlCommand("SELECT * FROM customers",conn);

准备过后,通过一个打开的连接发出命令

conn.Open();
var reader=cmd.ExecuteReader(CommandBehavior.CloseConnection);
reader.Clone();

由于打开数据读取器的时候会请求关闭连接的行为,因此在关闭读取器时,连接将自动关闭,SqlCommand类的几个方法能够执行命令。

执行方法 描述
ExecuteNonQuery 执行命令,但不返回值,适用于非查询语句,UPDATE
ExecuteReader 执行命令,返回一个指定输出流的开始位置的游标,适用查询命令
ExecuteScalar 执行命令,并返回单个值,适用于返回一个标量值的查询命令。MAX或COUNT
Execute.XmlReader 执行命令,返回一个XML读取器,适用返回XML内容的命令

多种选项,可用来获取业务需要的执行SQL语句或存储过程的结果。遍历一个数据读取器的记录

var reader=cmd.ExecuteReader(CommandBehavior.CloseConnection);
while(reader.Read())
{
  var column0=reader[0];
  var colum1=reader.GetString(1)
}
reader.Clone();

2:将数据加载到已断开连接的容器

如果处理一个很长的响应,同时使占用的内存量最少,那么特别适用使用读取器,如果是其他情况,更好的方法是将查询结果加载到一个已断开连接的容器,如DataTable对象,

conn.Open();
var reader=cmd.ExecuteReadr(CommandBehavior.CloseConnection);
var table = new DataTable("Customers");
table.Colums.Add("FirstName");
table.Colums.Add("LastName");
table.Colums.Add("CountryCode");
table.Load(reader);
reader.Close();

DataTable对象是具有架构,关系和逐渐的数据库表的内存版本。要填充一个DataTable对象,最简单的方法是获取一个数据读取游标,并加载声明的列表中的所有内容。映射是按照列索引进行的。Load方法背后的实际代码非常接近前面看到的循环,一般来说,可以采取的最安全的方法是使用Dispose模式,在C#using语句中创建数据库连接。

3:通过适配器获取数据

var conn=new SqlConnection();
conn.ConnectionString="...";
var cmd=new SqlCommand("SELECT * FROM customers",conn);
var table =new DataTable();
var adapter=new SqlDataAdapter(cmd);
adapter.Fill(table);

将数据加载到内存容器,最简洁的方式是使用数据适配器,数据适配器是一个汇总了整个查询过程的组件。

完整的O/RM和微型O/RM区别

重生产效率使用EF,存在大量的示例和功能,对命令进行内部优化。

微型O/RM占内存量小。功能少,缺少二级缓存和对关系的内置支持。

二级缓存指框架管理着额外的一层缓存,负责在配置的一定时间内持久化多个连接和事务的结果。EF不支持。EF Core有一个扩展项目。NHibernate支持。

二级缓存并不是区分主要的东西。主要是即对关系的支持

微型O/RM框架Dapper框架,NPoco框架,Insight.Database,PetaPoco

Dapper就性能而言,单个查询。Dapper比EF最多快10倍。

原文地址:https://www.cnblogs.com/ccaa/p/12546035.html

时间: 2024-10-19 07:41:07

EF Core-2的相关文章

(3).Net Core的EF Core的使用

EF Core(Entity Framework Core)是 EF 的.net core 版本.EF Core 对 SQLServer 支持很好,也可以在Linux下连接SQLServer.不过如果在Linux下首选MySQL,因此这次试一试MYSQL. EFCore 的 Nuget: Microsoft.EntityFrameworkCore(一般不需要单独安装,安装mysql的包的时候会把相关依赖的包自动下载下来). 官 方 的 mysql  ef  provider经网上查资料网友告知还

EF Core 数据库迁移(Migration)

工具与环境介绍 1.开发环境为vs 2015 2.mysql EF Core支持采用  Pomelo.EntityFrameworkCore.MySql   源代码地址(https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql) 场景 设计两张表 用户表(user)和发帖表(user) 一个用户对应多个用户 Coding Begin 1.新建项目(新建一个空console项目) 2.添加Nuget.config 增加

net Core 通过 Ef Core 访问、管理Mysql

net Core 通过 Ef Core 访问.管理Mysql 本文地址:http://www.cnblogs.com/likeli/p/5910524.html 环境 dotnet Core版本:1.0.0-preview2-003131 本文分为Window环境和Mac Os X环境. 相关资源下载 Visual Studio Code:https://code.visualstudio.com DotNet Core:https://dotnet.github.io/ MySql.Data.

NET Core驱动已出,支持EF Core

NET Core驱动已出,支持EF Core 千呼万唤始出来MySQL官方.NET Core驱动已出,支持EF Core. 昨天MySQL官方已经发布了.NET Core 驱动,目前还是预览版,不过功能已经可用. NuGet 地址: https://www.nuget.org/packages/MySql.Data.Core/ 本篇还是简单介绍一下:.NET Core 使用Dapper 操作MySQL 数据库, .NET Core MySQL官方驱动. 新建项目 新建一个.NET Core控制台

asp.net core+ef core

asp.net core+ef core 官方的文档https://docs.asp.net/en/latest/tutorials/first-mvc-app/start-mvc.html 先来看一下实现的效果 开始之前,确定本机已经有.NET Core环境.https://www.microsoft.com/net/core#windows 1.创建解决方案的文件结构如下图(模糊处理的过文件是自己后面加的和ef生成的). 2.要使用ef core,先引用ef core相关的程序包.https

再谈EF Core内存数据库单元测试问题

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:在用EF Core的内存数据库进行单元测试的时候遇到"无法访问已释放的对象"的错误怎么办? 之前在EF Core 1.0中使用Include的小技巧中简单谈到了使用EF Core内存数据库进行单元测试的方法.不过这个方法有个小问题,就是容易出现"无法访问已释放的对象"的错误. 在之前的示例代码中(http://git.oschina.net/ike/co

.net core 使用 ef core

第一步: 创建一个.net core console app. 第二步:安装EFCore package 和  design(以前vs是有EF项目模板的,core版本现在没有,所有安装这个工具来创建ModelsType Context等). 工具-->Nuget包管理器-->程序包管理控制台 1.Install-package microsoft.entityframeworkcore.sqlserver 2.Install-package microsoft.entityframeworkc

EF Core实践 (使用MS SqlServer)

这里使用 MS SQLSERVER ,网上大多使用 SQLite 先来一个CodeFirst 新建项目 这里我们选择  ASP.NET Core Web Application (.NET Core)  这里选择web 应用程序,然后更改身份验证 改为 不进行身份验证 然后再包管理控制台里执行下面两条命令 引用 EntityFrameworkCore Install-Package Microsoft.EntityFrameworkCore 再引用 EntityFrameworkCore.Sql

.NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0简介

.NET Core 1.0.ASP.NET Core 1.0和EF Core 1.0简介 英文原文:Reintroducing .NET Core 1.0, ASP.NET Core 1.0, and EF Core 1.0 新版本的 ASP.NET 和 Entity Framework 有一个严重的问题,就是它们同以前的版本不兼容.这不只是行为或 API 稍有差异的事,而基本上是进行了完全的重写,去掉了大量的功能. 因此,目前人们认为,将这些框架称为 ASP.NET 5.0 和 Entity

EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)

官方文档英文地址:https://github.com/aspnet/EntityFramework/wiki/Roadmap 历经延期和更名,新版本的实体框架终于要和大家见面了,虽然还有点害羞.请大家多体谅! 下面正式进入主题: Entity Framework Core (EF Core) 下面是EF Core 的计划和技术线路,注意,这些计划是可能发现变化的,因为很多事是很难预测的.即便如此,我们还是尽可能保持计划的公开和透明,以解大家对EF Core期望,以及做出相应的安排. Sched