zoukankan      html  css  js  c++  java
  • 第十一节: EF的三种模式(一) 之 DBFirst模式(SQLServer和MySQL两套方案)

    一. 简介

       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写法并没有什么两样

     1      private static void NewMethod()
     2         {
     3             Console.WriteLine("-----------------------1. DBFirst模式连接MySQL数据库-------------------------------");
     4             using (DbContext db = new mysqldb1Entities())
     5             {
     6                 //1.1 测试查询 (正常)
     7                 //List<tbb1> tList = db.Set<tbb1>().ToList();
     8                 //foreach (var item in tList)
     9                 //{
    10                 //    Console.WriteLine("id为:{0},name为:{1}", item.id, item.name);
    11                 //}
    12 
    13                 //1.2 测试一下大数据 (正常)
    14                 Stopwatch watch = Stopwatch.StartNew();
    15                 List<tbb1> tList2 = new List<tbb1>();
    16                 for (int i = 0; i < 1000; i++)
    17                 {
    18                     tbb1 t = new tbb1();
    19                     t.id = Guid.NewGuid().ToString("N");
    20                     t.name = "t" + i;
    21                     tList2.Add(t);
    22                 }
    23                 db.BulkInsert(tList2);
    24                 watch.Stop();
    25                 Console.WriteLine("{0}条数据耗时:{1}", 1000, watch.ElapsedMilliseconds);
    26             }
    27         }
    28         #endregion
  • 相关阅读:
    用php爬取网页
    无论我是一只菜鸟笨鸟
    有线网卡与无线网卡同时使用
    scapy 命令理解
    Wireshark Filter
    python OS/pdb 模块及数据类型基础
    scapy down and install
    python 字符操作函数
    python 类型集
    python 科学计算
  • 原文地址:https://www.cnblogs.com/yaopengfei/p/7780962.html
Copyright © 2011-2022 走看看