Visual Studio 2017 ASP.NET Framework MVC 项目 MySQL 配置连接

首先在 VS2017 中新建 Web ASP.NET Framework 项目

新建 Web ASP.NET Framework项目

选择MVC结构
选择MVC结构

使用NuGet包管理器安装插件
使用NuGet包管理器安装插件

安装 Entity Framework
安装 Entity Framework

摘抄

EF是一种ORM工具,ORM表示对象关联映射
在RDMS中,对象称为表格和列对象,而在.net中(面向对象)称为类,对象以及属性。

任何数据驱动的应用实现的方式有两种:

  • 通过代码与数据库关联(称为数据访问层或数据逻辑层)。

  • 通过编写代码将数据库数据映射到面向对象数据,或反向操作。

ORM是一种能够自动完成这两种方式的工具。EF是微软的ORM工具。

什么是代码优先的方法?

EF提供了三种方式来实现项目:

  • 数据库优先方法——创建数据库,包含表,列以及表之间的关系等,EF会根据数据库生成相应的Model类(业务实体)及数据访问层代码。

  • 模型优先方法——模型优先指模型类及模型之间的关系是由Model设计人员在VS中手动生成和设计的,EF将模型生成数据访问层和数据库。

  • 代码优先方法——代码优先指手动创建POCO类。这些类之间的关系使用代码定义。当应用程序首次执行时,EF将在数据库服务器中自动生成数据访问层以及相应的数据库。

什么是POCO类?

POCO即Plain Old CLR对象,POCO类就是已经创建的简单.Net类。在上两节的实例中,Employee类就是一个简单的POCO类。

查看Web.Config,定位项目根目录下的Web.Config, Entity Framework安装完成后,安装程序会主动更新该文件,可以看到配置中自动增加了如下配置信息

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
    <parameters>
      <parameter value="mssqllocaldb" />
    </parameters>
  </defaultConnectionFactory>
  <providers>
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
  </providers>
</entityFramework>

摘抄

Web.config文件是一个XML文本文件,它用来储存ASP.NETWeb 应用程序的配置信息(如最常用的设置ASP.NETWeb 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。当你通过.NET新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置,你可以在该子目录下新建一个Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。

要连接MySQL,我们还需要执行如下额外步骤:

从官网下载并安装MySQL到目标服务器,这里下载安装的是 mysql-5.5.61-winx64.msi,安装过程注意记录配置的账户密码,字符集最好选择 utf8
mysql-5.5.61-winx64.msi

下载并安装 mysql-connector-net-6.10.7.msi,这是MySQL的 ADO.NET驱动
mysql-connector-net-6.10.7.msi

下载并安装mysql-for-visualstudio-1.2.8.msi,该工具为Microsoft Visual Studio提供了访问MySQL对象和数据的通道
[mysql-for-visualstudio-1.2.8.msi

接下来回到Visual Studo界面,安装MySql Data Entity
安装 Entity Framework

**查看Web.Config, 此时<entityFramework>项内<parameters>项新增了如下信息:

<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
      </provider></providers>

在解决方案项目任一文件夹点击右键,选择“添加”–“新建项”,查看VisualStudio新建项,此时“数据库”分类下已包含ADO.NET实体数据模型
ADO.NET实体数据模型

配置数据库映射并连接MySQL数据库,有两种分类四个方式如下
四个方式

其中来自数据库的EF设计器来自数据库的Code First选项是将数据库表信息导入Visual Studio,创建时需要连接数据库并指定要导入的表(实体)信息生成模型
连接数据库
指定要导入的表

来自数据库的EF设计器模式生成的模型,可以看到和数据库里的表结构是一致的
生成的模型
User.cs是向导根据数据库自动生成的User类,UserModel.Context.cs文件里包含的TestEntities类是向导生成的数据上下文类,该类用于映射数据库,在控制器中对数据模型进行操作时都要先对其实例化,name=TestEntities是连接数据库字符串的名称
User.cs
UserModel.Context.cs
该项下模型代码根据EF设计自动生成,即所谓的DataFirst模式
此时Web.Config内新增了如下连接信息,metadata参数的意思是加载所有目录下的.csdl、ssdl、msl文件,详见【参考文章

<connectionStrings>
<add name="testEntities" connectionString="metadata=res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=root;password=test;database=test&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

来自数据库的CodeFirst生成了两个文件Models2.csuser.cs,该模式下直接生成模型代码及数据库关系定义
此时Web.Config内新增如下连接信息:

<connectionStrings>
<add name="Model22" connectionString="server=localhost;user id=root;password=test;database=test" providerName="MySql.Data.MySqlClient" />
</connectionStrings>

**这两个选项都需要先在数据库中定义好表关系,Visual Studio 中模型由数据库生成

空 EF 设计模型空 Code First 模型则是先在Visual Studio中创建EF设计或模型代码定义,然后再导入生成数据库表及关系

空 EF 设计模型 会生成一个空的EF设计器相关文件,此时在Visual Studio中通过可视化界面设计定义EF设计,然后根据当前EF设计生成模型代码并同步到数据库,例如以下步骤

  • 创建EF设计
    创建EF设计
  • 生成模型代码
    生成代码
  • 更改DLL生成模板到MySQL
    更改DLL生成模板到MySQL1
    更改DLL生成模板到MySQL2
    更改DLL生成模板到MySQL3
  • 根据模型生成数据库
    根据模型生成数据库1
    根据模型生成数据库2
    会生成一个sql脚本文档,在MySQL终端中执行这个sql脚本文档(推荐用SQLyog)
    根据模型生成数据库3

空 Code First 模型 可以理解为正常使用代码定义一个数据关系模型,然后同步到数据库表中, 新建后会自动生成一个文件Modelsx.cs,Modelsx类继承了DbContext,可在手动新建一个代码文件并定义模型类(例如use.cs)(推荐新建文件,也可根据自动生成的代码示例直接定义在Modelsx中)
如下新建该项后Web.Config中新增如下信息:

<add name="ModelTest" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=WebApplication1.Models.Modelsx;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

name=ModelTest指定了当前连接关联的模型,需要修改这个配置以正确连接并更新代码模型到MySQL数据库中,观察connectionString内容,其中

  • data source定义了数据库的连接信息**
  • initial catalog定义了数据库初始化信息,此处的值指定了数据库初始化时的名称,而非初始化时加载代码
  • providerName指定了需要关联的数据库驱动
  • integrated security集成验证,使用Windows验证的方式去连接到数据库服务器,不是必须的
  • MultipleActiveResultSets的作用是指定多活动的结果集是否与指定的链接相互关联,可以使数据库连接复用减轻系统的负担,不是必须的
  • App=EntityFramework 不是必须的

connectionString修改为如下内容

<add name="ModelTest" connectionString="server=localhost;user id=root;password=test;database=testdb;charset=utf8;initial catalog=testdb;" providerName="MySql.Data.MySqlClient" />

根据ModelTest.csuse.cs 定义TestController.cs代码,如在ModelTest中定义方法用来操作数据库use表

public ModelTest()
             : base("name=uses")
{
         public DbSet<MyEntity> uses { get; set; }
}

TestController中定义

public ActionResult Index()
{
    ModelTest modelTest = new ModelTest();
        uselist = modelTest.uses.toList();
        return View('MyUsesView', uselist);
}

则当浏览localhost:*/Test时,服务器代码会自动在MySQL中创建testdb数据库并在testdb中创建uses表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值