项目伊始,创建数据库交互层代码是底层框架的首要任务。常用的做法包括手动编码、Hibernate或者动软之类的代码生成器,而多数人忽略了.Net环境下VS提供的两套非常好用的数据层工具。

EF和Linq2Sql两套框架。 实际上他们相比其他方式绝对是最快,最方便的。 对使用者而言,无论EF还是Linq2Sql,他们都默认将项目配置了正确的数据库连接,大幅减少在代码中的工作量。

EF是Entity Framework 的缩写,目前应该是到了第7个版本(貌似在Beta版本)。

Microsoft has given the following definition of Entity Framework:

The Microsoft ADO.NET Entity Framework is an Object/Relational Mapping (ORM) framework that enables developers to work with relational data as domain-specific objects, eliminating the need for most of the data access plumbing code that developers usually need to write.

实际上,按照微软给出的定义,EF的目的在于简化开发人员工作量,推出了这套框架。下图是EF的工作流程示例。

实际上,EF支持从数据表建立实体类,从实体类生成数据表以及从数据库设计(DB Model)自动创建实体类和数据表。

如此可以直接大幅降低花费在数据库设计、建表和写实体类的工作。毕竟那是码农们干的事情,程序员怎么可以这么浪费时间呢。

目前为止,EF6应该是最新的。接下来从 table -> Domain Class的模式出发,简单介绍EF的使用。

VS里自己集成了EF,创建EF的数据层的步骤是:为解决方案添加数据库连接,之后在解决方案下新建项目作为数据交互层,再在该项目下新建EF。

1. 建立数据库连接。

2. 创建ADO.Net 数据库实体

3. 选择Code First, 这里我是已经存在数据库了。

4. 可以看到结果已经创建好所有被选中的数据表实体模型了。

接下来我们写一段代码进行数据访问。在我的示例里,我们计划查询的一张表目前的数据量是在100万条记录以上。我们进行简单的select查询。

public void Test1_Select()
{
Model1 modelContext = new Model1();
//select from rt_LeakProbe
  var temp = modelContext.rt_LeakProbe.toList();
long count = temp.Count();
  DateTime lastDate = temp.GroupBy(x => x.UploadTime).Max(x => x.Key);
  Console.WriteLine("count is: {0}; last Data Time is :{1};", count, lastDate.ToString("yyyy-MM-dd HH:mm:ss:ffff"));
}

在我们使用 db First创建了数据表的实体同时,得到了一个默认命名为 Model1的类。这个类实际上是我们操作所有数据表的核心。在前一张截图中可以看到,Model1 是继承了DbContext类。

关于DbContext类,可以理解成一个具备访问配置项目的基类,在这里,我们要访问的项目就是在这个项目的App.Config中能够找到的配置项。(你也可以认为就是数据库连接)

以上代码使用MS Test框架创建单元测试形式来测试。

需要注意的是,MS Test同样需要使用NuGet进行EF的安装以便正常读取到数据库连接配置。

查询结果, 数据量 1067189, 最新纪录上传时间是11:54:25.777。

相信EF的优势已经有所体现。当然个人暂时认为是存在一定不足的,比如说业务表设计中是可以使用继承方式简化一部分操作,而无论EF、Hibernate还是 Linq2Sql都提供直接的Mapping功能,这样再去做继承很麻烦。

但是实际上直接的Mapping在数据库设计非常合理的前提下,是最简单可靠的做法。

总而言之,EF这类工具非常高效,大幅简化开发人员花在搭建数据层所需要的时间。个人也认为,使用EF的效率是高于Hibernate和动软之类工具的。

【Visual Studio】 使用EF、 Linq2Sql快速创建数据交互层(一)的更多相关文章

  1. Unity中启动VS时出现"Visual Studio 2010 Shell 无效的许可证数据"的解决办法

    (感觉还是cnblog好一点,刚注册成功赶紧把baidu hi的一篇文章搬过来试试) 一直用着Visual Studio 2013给Unity写代码,安装了SQL Server 2014后,在Unit ...

  2. ASP.NET Core 中文文档 第二章 指南(1)用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序

    原文:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 作者:Daniel Roth.Steve Smith ...

  3. [Visual Studio] 开启Visual Studio 2012通过右键菜单创建单元测试(Unit Test)

    Visual Studio 2012可以说是迄今为止微软VS开发工具中用户体验最好的产品,无论是速度还是体验以及功能,都非常出色,但是,使用了一段时间后发现有一个之前版本VS都有的功能却在Visual ...

  4. Visual Studio 2012中的为创建类时的添加注释模板

    我们往往需要给类添加注释,我们可以把注释块复制出来,放到文件中,然后在需要的时候,复制.粘贴.这样的重复劳动增加了程序员的体力劳动,而VS中给我们提供了项模版,我们只需要在其中修改一点点模版就能达到这 ...

  5. SharePoint 2010中使用Visual Studio 2010进行方便快速的Web Part开发

    转:http://www.cnblogs.com/fatwhale/archive/2010/02/24/1672633.html 在Visual Studio 2010中,  已经集成了用于Shar ...

  6. 使用 Visual Studio Team Services 和 IIS 创建持续集成管道

    若要将应用程序开发的生成.测试和部署阶段自动化,可以使用持续集成和部署 (CI/CD) 管道. 本教程介绍如何在 Azure 中使用 Visual Studio Team Services 和 Win ...

  7. 在linux系统中安装VSCode(Visual Studio Code)和图标的创建方式

    本文转载自:https://www.cnblogs.com/lzpong/p/6145511.html,自己添加了一些关于依赖包安装的. 1.从官网下载压缩包(话说下载下来解压就直接可以运行了咧,都不 ...

  8. Unity 2018.3.0f 版本用C#编程启动VS时出现"Visual Studio 2010 Shell 无效的许可证数据"的解决办法

    C#编程时,启动VS出现的问题如图: 网上有提到用更改注册表的方式,亲测效果未发生改变,在不确定修改后效果如何时,尽量先将原有的数据备份下来: 本文介绍楼主用另外一种方式解决的: 由于脚本系统默认启动 ...

  9. 用VisualAssist在Visual Studio上设置快捷键快速编程

    一  在Visual Studio上安装VisualAssist工具: 链接:https://pan.baidu.com/s/1uaeRFTvY4p7LNoDvQFEU5A 提取码:j1ws 安装后, ...

随机推荐

  1. [Python3 练习] 006 汉诺塔2 非递归解法

    题目:汉诺塔 II 接上一篇 [Python3 练习] 005 汉诺塔1 递归解法 这次不使用递归 不限定层数 (1) 解决方式 利用"二进制" (2) 具体说明 统一起见 我把左 ...

  2. [Python3 填坑] 011 元组中有多个最值,索引出来的是哪一个

    目录 1. print( 坑的信息 ) 2. 开始填坑 (1) max() (2) min() (3) 结论 1. print( 坑的信息 ) 挖坑时间:2019/01/11 明细 坑的编码 内容 P ...

  3. CVE-2016-2502-drivers/usb/gadget/f_serial.c in the Qualcomm USB driver in Android. Buffer Overflow Vulnerability reported by #plzdonthackme, Soctt.

    CVE-2016-2502-drivers/usb/gadget/f_serial.c in the Qualcomm USB driver in Android.Buffer Overflow Vu ...

  4. python学习第五十天shutil模块的用法

    什么shutil模块,就是对高级的文件,文件夹,压缩包进行处理的模块,下面简单讲述其用法. 文件和文件夹的操作 拷贝文件内容 import shutil shutil.copyfileobj(open ...

  5. 如何在CentOS 7上安装newman

    前提:先安装nodejs,详见:如何在CentOS 7上安装Node.js和npm #sudo npm install -g newman 结果: /usr/local/bin/newman -> ...

  6. asp.net core2.1认证和授权解密

    来源:https://www.cnblogs.com/pangjianxin/p/9372562.html asp.net core2.1认证和授权解密 本篇文章翻译自:https://digital ...

  7. JavaScript异步的底层原理

    JavaScript引擎属于单线程作业,意味着:在同一时间只能执行一个代码块,这些代码块的执行就阻塞了异步事件的处理. 因此,出现了"任务队列"(task queue),我们可以将 ...

  8. neovim初次安装使用

    github下载neovim代码 按readme中安装,中间可能 要安装一些库 将vim的配置关联到nvim,发现和vim是一样的 ln -s ~/.vim ~/.config/nvim ln -s ...

  9. C++宽字符串转字符串

    这文章是更改别人代码 #include <string> #include <iostream> #include <stdlib.h> #include < ...

  10. C# List<object> 按特定字段排序

    using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...