ef

C# 实现EF的分页功能封装

允我心安 提交于 2019-11-29 08:23:32
在项目过程中经常需要使用分页,EF分页基本实现思路是使用DB.OrderBy(c=>c.id).Skip(10).Take(10) 如果你懂一下泛型和委托的用法的话可以自己封装一个分页函数,代码如下: using QYHT.WebUI.Models; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Web; namespace QYHT.WebUI.Common { public class methods { /// <summary> /// 分页查询 + 条件查询 + 排序 /// </summary> /// <typeparam name="Tkey"> 泛型 </typeparam> /// <param name="pageSize"> 每页大小 </param> /// <param name="pageIndex"> 当前页码 </param> /// <param name="total"> 总数量 </param> /// <param name="whereLambda"> 查询条件 </param> /// <param name="orderbyLambda"> 排序条件 <

仓储模式还适用于EF Core吗?

倾然丶 夕夏残阳落幕 提交于 2019-11-29 06:40:06
EF Core已经出2.1版,开始考虑使用据传性能调优已经接近C++的.Net Core写新项目。想要抛弃以前使用asp.net那种sql脚本的码代码方式。同时找了一些开源的项目,比如ABP,SimpleCommerce。 其中ABP项目大而全,封装了很多模式,但文档更多是描述如何使用,如果自己不去看代码很容易不知所云。ABP项目基于Ioc( castle windsor )的动态代理特性实现了及其灵活的模块化方案,可以在运行过程中加载项目并初始化。同时ABP封装了自身的UnitofWork方式,结合了IoC框架太多特性 ( castle windsor )。 比如使用了该框架动态代理的实现,在业务执行之前插入UnitofWork相关逻辑。 而SimpleCommerce则利用了AutoFac以及asp.netcore的特性实现了模块化。对于仓储模式涉及的比较少。对于项目解耦可以说是一个简单的示例。 那么究竟要怎么开始EFCore项目?近期看到一篇,比较实用简单。 不,仓储或者说unit-of-work模式(简称 Rep/UoW)不再使用于EF Core。EF Core 已经实现了Rep/UoW模式,因此在ef core之上再抽象一层Rep/UoW模式,并无帮助。 比较明智的选择是直接使用EF Core,这样你可以使用EF Core 的全部功能,以实现高性能的数据库访问。

ASP.NET 5系列教程 (二):Hello World

狂风中的少年 提交于 2019-11-28 22:42:29
本篇文章内容比较基础,主要是向大家展示如何创建一个 ASP.NET 5 工程,主要包含内容如下: 创建ASP.NET 5 工程 添加 Todo 控制器 安装 K Version Manager 执行 EF 迁移 打开Visual Studio 2015 Preview。选择 ” File” 菜单,选择 New > Project 。 在 New Project 对话框中,点击 Templates > Visual C# > Web ,选择 ASP.NET Web Application 工程模板。命名工程为"TodoList",点击 OK 。 添加Todo 控制器 1. 下载完整工程 completed project 。 2. 在工程解决方案管理器中,右键点击 Controllers 文件夹> Add > Exiting Item 。 输入下载工程中的 TodoController.cs 文件路径 。 3. 使用相同的方法添加 Models\TodoItem.cs 和 Models\TodoItemEditModel.cs 文件到 Models 文件夹。 4. 在Views下创建 ToDo 文件夹。使用同样方法,添加 Views\ToDo 文件夹下所有View文件到 Views\Todo 文件夹。 5. 更改 Views\Shared\_Layout.cshtml 文件下的

在.net core程序中使用EntityFrameok(非EF Core)

一个人想着一个人 提交于 2019-11-28 18:56:55
最近用NoSQL较多写,用传统的EF到不多,但在一些.net core小程序中也小试牛刀过,不过当时用的是微软为.net core量身定制的Entity Framework Core,只是一些比较常规的增删改查,没有怎么深入使用,感觉差别不大。虽然知道EF Core是重新设计的,但觉得EF Core和EF在轻度使用上差别不大。 这两天打算计划重构一个老项目,想将其迁移到.net core上去。简单的试了一下,大部分的功能移植比较顺利,但却发现EF迁移到EF Core不是那么容易的事情,模型的关系映射的API就有不小差异,另外,底层的一些API也有不少差异。甚至官方也说EF6到EF core不是升级, 不建议将EF6程序迁移到EF Core 。 虽然可以一个个的修改和适配,但额外的工作量就一下上来了,并且还带来了不少测试的工作。网上搜了一下解决方案,有一个第三方移植的支持.net core的 移植版本EF ,但这个是非官方版本,担心里面有坑,不敢尝试。 正当我准备放弃.net core的迁移的时候,不经意间把nuget的预览版本的选项打开了,发现 EF 6.3 preview 版本支持.net standard了,然后就下载试了一下,直接顺利迁移过去就能用。感觉也没有什么bug。找了一下官方的文档: Announcing Entity Framework 6.3 Preview

Asp.net core 学习笔记 ef core Surrogate Key, Natural Key, Alternate Keys

我怕爱的太早我们不能终老 提交于 2019-11-28 12:55:33
Surrogate Key vs Natural Key, 争论多年 https://www.mssqltips.com/sqlservertip/5431/surrogate-key-vs-natural-key-differences-and-when-to-use-in-sql-server/ 2 个都有好处坏处. ef core 对 Natural Key 支持比较弱. 使用 Alternate Keys 来实现 https://docs.microsoft.com/en-us/ef/core/modeling/alternate-keys 它最糟糕的地方是,目前不支持修改 https://stackoverflow.com/questions/36200436/cannot-update-alternate-key-entity-framework-core-1-0 https://github.com/aspnet/EntityFrameworkCore/issues/4073 对我来说大部分情况下 Surrogate Key 是好用的 但它凡事都要 join 表比较麻烦, filter 也好,查询值也好,都一定要 join. 所以我认为 Natural Key 在满足 2 个点时候会更好用 1. join 的 table 只是一个 primary column 2.

Razor 页面解说

眉间皱痕 提交于 2019-11-28 10:41:57
自己开始从头深造-    本是想将时间缩短,但发现自己还是很难呀。希望你理解吧,这里的知识 是 页面的基本信息。也页面的跳转关系和 Tag的帮助标签。 Section PartView. @page @model 。如果有情趣的同学查一些 mvp mvc mvvm 的发展关系,   在下一节之前,继续之前,我想插入一节 EF 的基本操作信息 方便后续内容 学习的进行,因为 Razor 的教程任务你 回了EF 所以我就来个一个那里不会补充点那里方便我们学习 希望你 理解 链接: https://pan.baidu.com/s/1u6m1La5gR5OBIR-31QqHfg 提取码: i346 留言给点意见 来源: https://www.cnblogs.com/lazy-coder/p/11938810.html

EntityFrameworkCore 试用

北慕城南 提交于 2019-11-28 08:32:35
引用 EF Core Sqlite Install-Package Microsoft.EntityFrameworkCore.SqlServer 引用 EF Core Tool Install-Package Microsoft.EntityFrameworkCore.Tools –Pre 引用 EF Core Sqlite Design Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design 引用好以后我们在project.json -> tools 节点加上 "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final" "tools": { "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final", "BundlerMinifier.Core": "2.0.238", "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final", "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final" }, 可以使用 dotnet 命令

EF core的原生SQL查询以及用EF core进行分页查询遇到的问题

[亡魂溺海] 提交于 2019-11-28 04:38:01
在用.net core进行数据库访问,需要处理一些比较复杂的查询,就不得不用原生的SQL查询了,然而EF Core 和EF6 的原生sql查询存在很大的差异。 在EF6中我们用SqlQuery和ExecuteSqlCommand进行sql语句的执行,而在EF Core中我们则使用FromSql和ExecuteSqlCommand 一.ExecuteSqlCommand(这两者没什么太大的区别)        Company08Entities db = new Company08Entities();        string sql = string.Format("update Cars set IsPub='是',PubTime='{1}' where Id in ({0})",ids,DateTime.Now); int res = db.Database.ExecuteSqlCommand(sql); //返回受影响的行数 if (res>0) { return Json(new UIResult(true,"发布成功!")); } else { return Json(new UIResult(false,"发布失败,请重试!")); } 二.数据库查询语句两者的差别就太大了,这里我会详细举例说明    1

EF Core 使用编译查询提高性能

落花浮王杯 提交于 2019-11-28 04:37:34
今天,我将向您展示这些EF Core中一个很酷的功能,通过使用显式编译的查询,提高查询性能。 不过在介绍具体内容之前,需要说明一点,EF Core已经对表达式的编译使用了缓存;当您的代码需要重用以前执行的查询时,EF Core将使用哈希查找并从缓存中返回已编译的查询。 关于这一点,您可以查阅github上面的代码 QueryCompiler.cs 不过,您可能希望直接对查询进行编译,跳过哈希的计算和缓存查找。我们可以通过在 EF 静态类中下面两个方法来实现: EF.CompileQuery() EF.CompileAsyncQuery() 这些方法允许您定义一个已编译的查询,然后通过调用一个委托调用它。 如果您对表达式的哈希计算感兴趣,可以看一看它的实现,非常复杂, ExpressionEqualityComparer.cs 。 为了避免因为数据库查询产生测试结果的差异,我们这里使用内存数据库,它开销更小,同时也可以避免数据库优化执行计划以及缓存所带来的问题。 实体定义以前数据库DbContext 定义实体 在这我们定义一个 Category 实体类型,非常简单,只有两个属性。 public class Category { public Guid Id { get; set; } public string Name { get; set; } } 数据库DbContext 在

EF接触02

牧云@^-^@ 提交于 2019-11-27 15:58:07
Ado.net Entity Framework早期称为ObjectSpace。基于Ado.net操作数据库的一组类库。 什么是ADO.NET? 基础.net平台下的操作数据库的一组Api或组建。五大对象。连接池。 什么是ORM框架 ??? ORM框架就是表实体对象和数据库的表之间的相互转换。 edmx模型,一个模型对应一个实体类 使用ORM框架EF来实现,将实体的变化映射到数据库里面去 1.创建一个EF访问数据库的上下文,HttpContext 在XX.Contenxt.cs类里面 ExanEntities dbContext=new ExanEntities(); 2。做一个添加操作 //2.1创建一个Claass实体 ClassInfo classInfo=new ClassInfo(); classInfo.AddTime="sssss"; //2.2.把实体添加到数据库中,告诉EF我们要用实体做一个添加操作 dbContext.ClassInfo.Add(ClassInfo); dbContext.Entry(classInfo).state=EntityState.Add;(可以省略) 3.修改操作(传个实体过去更新) dbContext.ClassInfo.Attach(classInfo); dbContext.Entry(classInfo).state