项目伊始,创建数据库交互层代码是底层框架的首要任务。常用的做法包括手动编码、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. mysql字符串拆分实现split功能

    转自:https://blog.csdn.net/pjymyself/article/details/81668157有分隔符的字符串拆分题目要求数据库中 num字段值为: 实现的效果:需要将一行数据 ...

  2. 大牛总结的 Git 使用技巧,写得太好了!

    作者:你喜欢吃青椒么 juejin.im/post/5d157bf3f265da1bcc1954e6 前言 本文是参考廖雪峰老师的Git资料再加上我自己对Git的理解,记录我的Git学习历程,作下此文 ...

  3. ARM汇编1

    一. 指令和伪指令 1.1. 指令 a. (汇编)指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器码,可以由CPU读取执行. 1.2. 伪指令 b. (汇编)伪指令本质上不是指令(只是 ...

  4. Appium+Python之异常自动截图

    运行过程中出现异常情况,我们怎么直观的看到呢?最简单的方法就是可以把异常现象截图下来. 思路:我这里采用get_screenshot_as_file(filename)方法,filename通过获取时 ...

  5. 一篇包含了react所有基本点的文章

    去年,我写了一本关于学习React.js的小书,原来是大约100页. 今年我要挑战自己,把它归纳为一篇文章. 本文不会涵盖什么是React,或者为什么要学习它. 相反,这是面向已经熟悉JavaScri ...

  6. log.info()传入多个参数的方法

    不知道项目里用的是啥 ** 版本的 log4j 居然不能传入变长参数 logger.info(String.format("%s %s %s", username, feature ...

  7. nginx负载均衡的搭建和简单例子

    一,nginx 下载地址:http://nginx.org/en/download.html 二,下载对应版本 三,打开下载的安装包:如下图 四,运行nginx.exe 1,这个是时候,程序运行都是一 ...

  8. vue-fiters过滤器的使用

    1.定义过滤器 2.使用过滤器 ...... <el-table-column prop="user_gender" align="center" lab ...

  9. Install.php

    <!DOCTYPE html><html lang="en"><head> <meta charset="utf-8" ...

  10. .net Console.ReadLine无效

    代码中出现了 Console.ReadLine无效解决办法:把应用程序的输出类型改为 控制台应用程序