一. 简介

  EF连接数据库有三种模式,分别是DBFirst、ModelFirst、CodeFirst,分别适用于不同的开发场景。

  该章节,将主要介绍EF的DBFirst连接SQLServer数据库和MySql数据库两种操作方式

  该模式在EF中出现的出现的最早,符合我们的传统开发模式,先设计数据库→然后在代码通过EF与数据库建立映射关系,是EF最早的一种使用方式,使用广泛.以数据库为驱动,生成实体模型,从而驱动整个开发流程。

(1). 优点:操作简单,直接通过可视化界面与数据库表(存储过程、视图等)建立映射关系,省去自己建立表实体的繁琐步骤.
 (2). 缺点:与表依赖太强,而且实体是通过T4模板生成的,无法自己根据实际需要来修改,并且一旦数据库修改,就需要重新映射edmx文件了.
 (3). 特点:通过T4模板来生成EF上下文和实体模型; 并且可以直接将存储过程或视图映射到生成的上下文中,通过EF上下文直接调用存储过程(详见 EF调用存储过程章节)

二. DBFirst连接SQLServer数据库

1. 选择ADO.NET数据实体模型

2. 选择模型内容:来自数据库的EF设计器

3. 设置服务器及连接字符串

4. 选择数据库的连接并且可以设置配置文件的名称

5. 选择要映射的表、视图、存储过程和函数,完成映射

6. 如果框架是分层的,需要将生产的连接数据库的字符串,复制到主程序的配置文件中

三. DBFirst连接MySQL数据库

 事先准备和注意事项:

步骤:

①:安装mysql-connector-net-6.9.9.msi,下载地址:https://dev.mysql.com/downloads/connector/net/ (vs2012-vs2017通用)

②:安装mysql-for-visualstudio-1.2.7.msi,下载地址:https://dev.mysql.com/downloads/windows/visualstudio/ (vs2012-vs2017通用)

③:连接远程服务器需要先在对应数据库服务器上对访问外来的ip和用户名、密码进行授权。

如:GRANT ALL PRIVILEGES ON *.* TO 'root'@'39.88.192.171' IDENTIFIED BY '123456' WITH GRANT OPTION;

表示:ip为39.88.192.171的root用户、密码为123456可以远程访问该数据库服务器

④:安装常规的DBFist模式进行连接即可,但连接界面要选择MySQL对应的界面。

 特别注意:在使用该模式的时候,会遇到这么几个烦人的情况,如果该项目中已经引用的了EF的程序集,在可视化界面无法选择EF版本。

 但是如果你把引用的程序集删了,可视化界面只能选择EF5.0

所以解决方案:

步骤①:如果引用了EF的程序集,先删掉,然后用可视化界面把EF5.0添加进来,然后在使用Nuget把EF5.0卸载掉。

步骤②:通过nuget一次添加 EF6.x、MySql.Data、MySql.Data.Entity、MySql.Web 程序集的引用.

步骤③:如果是分层开发,不但要向封装层添加引用,还要想主程序层添加EF6.x、MySql.Data、MySql.Data.Entity、MySql.Web 程序集的引用.

步骤④:主程序层配置文件中<entityFramework>→<providers>节点下添加:

<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"></provider>

如果是通过Nuget添加的程序集,检查一下是否已经自动添加了,避免重复添加的情况

链接步骤:使用MySQL的客户端界面

代码测试,和SQLServer写法并没有什么两样

      private static void NewMethod()
{
Console.WriteLine("-----------------------1. DBFirst模式连接MySQL数据库-------------------------------");
using (DbContext db = new mysqldb1Entities())
{
//1.1 测试查询 (正常)
//List<tbb1> tList = db.Set<tbb1>().ToList();
//foreach (var item in tList)
//{
// Console.WriteLine("id为:{0},name为:{1}", item.id, item.name);
//} //1.2 测试一下大数据 (正常)
Stopwatch watch = Stopwatch.StartNew();
List<tbb1> tList2 = new List<tbb1>();
for (int i = ; i < ; i++)
{
tbb1 t = new tbb1();
t.id = Guid.NewGuid().ToString("N");
t.name = "t" + i;
tList2.Add(t);
}
db.BulkInsert(tList2);
watch.Stop();
Console.WriteLine("{0}条数据耗时:{1}", , watch.ElapsedMilliseconds);
}
}
#endregion

第十一节: EF的三种模式(一) 之 DBFirst模式(SQLServer和MySQL两套方案)的更多相关文章

  1. ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪

    ASP.NET MVC深入浅出(被替换)   一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...

  2. 第十四节: EF的三种模式(四) 之 原生正宗的 CodeFirst模式的默认约定

    一. 简介 1. 正宗的CodeFirst模式是不含有edmx模型,需要手动创建实体.创建EF上下文,然后生成通过代码来自动映射生成数据库. 2. 旨在:忘记SQL.忘记数据库. 3. 三类配置:On ...

  3. 第七节: EF的三种事务的应用场景和各自注意的问题(SaveChanges、DBContextTransaction、TransactionScope)

    一. 什么是事务 我们通俗的理解事务就是一系列操作要么全部成功.要么全部失败(不可能存在部分成功,部分失败的情况). 举一个事务在我们日常生活中的经典例子:两张银行卡(甲.乙),甲向乙转钱,整个过程需 ...

  4. 第十节: EF的三种追踪实体状态变化方式(DBEntityEntry、ChangeTracker、Local)

    一. 简介 我们在前面章节介绍EF基本增删改的时候,曾说过EF的SaveChanges()方法,会一次性的将所有的实体的状态变化统一提交到数据库,那么你是否想过EF的实体会有哪些状态变化呢?什么原因会 ...

  5. 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法

    一. 背景 上一个章节,介绍了EF调用两类SQL语句,主要是借助 ExecuteSqlCommand  和 SqlQuery 两个方法来完成,在本章节主要是复习几类存储过程的写法和对应的EF调用这几类 ...

  6. 第十三节: EF的三种模式(三) 之 来自数据库的CodeFirst模式

    一. 简介 [来自数据库的Code First模式]实质上并不是CodeFirst模式,而是DBFirst模式的轻量级版本,在该模式中取消了edmx模型和T4模板,直接生成了EF上下文和相应的类,该模 ...

  7. Spark部署三种方式介绍:YARN模式、Standalone模式、HA模式

    参考自:Spark部署三种方式介绍:YARN模式.Standalone模式.HA模式http://www.aboutyun.com/forum.php?mod=viewthread&tid=7 ...

  8. EF的三种模式

    1.DateBase First(数据库优先) 2.Model First(模型优先) 3.Code First(代码优先) 当然,如果把Code First模式的两种具体方式独立出来,那就是四种了. ...

  9. Entity Framework 5.0系列之EF概览-三种编程方式

    概述 在开发面向数据的软件时我们常常为了解决业务问题实体.关系和逻辑构建模型而费尽心机,ORM的产生为我们提供了一种优雅的解决方案.ADO.NET Entity Framework是.NET开发中一种 ...

随机推荐

  1. WIN提权总结【本地存档-转载】

    [ web提权 ] 1.能不能执行cmd就看这个命令:net user,net不行就用net1,再不行就上传一个net到可写可读目录,执行/c c:\windows\temp\cookies\net1 ...

  2. 【English 】20190319

     BOKO鼻子['boʊkoʊ] pores毛孔['pɔ:z] cute漂亮可爱[kjut] DEKO-BOKO pores don't make a girl cute! ideal最理想的[aɪˈ ...

  3. rabbitMQ、activeMQ、zeroMQ、Kafka、Redis 比较

    Kafka作为时下最流行的开源消息系统,被广泛地应用在数据缓冲.异步通信.汇集日志.系统解耦等方面.相比较于RocketMQ等其他常见消息系统,Kafka在保障了大部分功能特性的同时,还提供了超一流的 ...

  4. JavaScript 函数闭包的应用

    一.模仿块级作用域 JavaScript 没有块级作用域的概念,那么可以模拟像java中将很多变量私有化封装起来,保护数据,防止数据泄漏,封装细节,这样安全性和可控性更高 function box(c ...

  5. SDOI 2019 R1游记

    $SDOI$ $2019$ $R1$游记 昨天才刚回来,今天就来写游记啦! Day -5: 做了一下去年省选的Day1,感觉很神仙. Day -4: 做了一下去年省选的Day2,感觉还是很神仙. Da ...

  6. loc iloc函数的区别

    import pandas as pd data1 = pd.read_excel(r"G:\Python\example1.xlsx") loc 用行列标签,iloc用数字索引. ...

  7. yafu安装使用方法以及mismatched parens解决方法

    yafu用于自动整数因式分解,在RSA中,当p.q的取值差异过大或过于相近的时候,使用yafu可以快速的把n值分解出p.q值,原理是使用Fermat方法与Pollard rho方法等. 再摘录官方的一 ...

  8. .NET Core 实现 Redis 批量查询指定格式的Key

    一. 问题场景 Redis 作为当前最流行的内存型 NoSQL 数据库,被许多公司所使用,作为分布式缓存.我们在实际使用中一般都会为 key 带上指定的前缀或者其他定义的格式.当由于我们程序出现bug ...

  9. 【北航软件工程】Alpha阶段前端页面编写及服务器部署

    前端页面编写 虽然之前对html语法有过一些了解,但是完全没有编写前端页面的经验,和我合作的czy大概也是这么个情况.在Alpha阶段的前端页面编写过程中,我们是摸着石头过河,html是个入门很快专精 ...

  10. 解决Jenkins中执行jmeter脚本后不能发报告(原报告被覆盖、新报告无法保存)的问题

    我没有找到根本原因,但是我用了个取巧的办法: 先将原来的报告移到别的文件夹,执行完jmeter脚本后,再把那些旧报告移回来(也可以不移回来,我这里是为了能从jenkins页面上看).