使用Asp.Net Core MVC 开发项目实践[第三篇:基于EF Core的扩展]
2019-02-25 15:01
1391 查看
上篇我们说到了EFCore的基础使用,这篇我们将讲解下基于EFCore的扩展.
我们在Mango.Framework.EFCore类库项目中创建一个类名EFExtended的扩展类,并且引入相关的命名空间
using System; using System.Reflection; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.SqlClient; using Microsoft.EntityFrameworkCore; using System.Linq; using System.Linq.Expressions; namespace Mango.Framework.EFCore { public static class EFExtended {} }
第一个扩展:基于传统DataTable(这个在2.0中才开始有)的返回
#region 查询返回DataTable的扩展 //自定义SQL语句
public static DataTable QueryDataTable(this DbContext context, string sql, params SqlParameter[] parameters) { DbConnection connection = null; DbCommand command = null; try { connection = context.Database.GetDbConnection(); if (connection.State == ConnectionState.Closed) { connection.Open(); } command = connection.CreateCommand(); command.CommandText = sql; command.Parameters.AddRange(parameters); DbDataReader reader = command.ExecuteReader(); var result= FillDataTable(reader); //释放连接资源 command.Dispose(); connection.Close(); // return result; } catch (Exception ex) { throw ex; } finally { //释放连接资源 if (command != null) { command.Dispose(); } if (connection != null) { connection.Close(); } } } private static DataTable FillDataTable(DbDataReader reader) { bool defined = false; DataTable table = new DataTable(); while (reader.Read()) { object[] values = new object[reader.FieldCount]; //插入列信息 if (!defined) { for (int i = 0; i < reader.FieldCount; i++) { DataColumn column = new DataColumn() { ColumnName = reader.GetName(i), DataType = reader.GetFieldType(i) }; table.Columns.Add(column); } defined = true; } //插入数据 reader.GetValues(values); DataRow dataRow = table.NewRow(); for (int i = 0; i < values.Length; i++) { dataRow[i] = values[i]; } table.Rows.Add(dataRow); } return table; } #endregion
就是通过DbCommand类执行SQL语句返回DbDataReader的数据集合,将返回的数据集合填充到DataTable实例中去.
第二个扩展:基于SQL语句的查询返回指定的集合对象
using System; using System.Collections.Generic; using System.Reflection; using System.ComponentModel; namespace Mango.Framework.EFCore { public class DbIdentity { internal static object Change(object value, Type type) { if (type.IsGenericParameter) { if (type.IsGenericParameter && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) { if (value == null) { return null; } NullableConverter nullableConverter = new NullableConverter(type); value = Convert.ChangeType(value, type); } } return value; } } }
相关文章推荐
- 使用Asp.Net Core MVC 开发项目实践[第四篇:基于EF Core的扩展2]
- 使用Asp.Net Core MVC 开发项目实践[第五篇:缓存的使用]
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
- 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序
- 在Mac上开发使用yoeman构建Asp.net core项目并且实现分层引用
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(3)
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)
- 使用visual studio 2017开发Asp.net core mvc项目
- 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序
- [转]UltraWebGrid控件在开发ASP.NET项目中的使用方法和技巧
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(六)-- 依赖注入
- 分析基于ASP.NET的Web网络应用程序开发的平安策略实践
- 基于ASP.NET WPF技术及MVP模式实战太平人寿客户管理项目开发(Repository模式)课程分享
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(二)-- Web Api Demo
- 项目实践精解:ASP.NET应用开发
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建项目
- Sharepoint online 如何使用asp.net开发项目!!!
- ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(八)-- 多环境开发