1、安装插件

在使用Visual Studio 2013添加ADO.NET实体数据模型新建连接时,默认是没有Mysql选项的。此时我们需要安装两个东西:

1、mysql-for-visualstudio:Mysql的Visual Studio插件,推荐1.2.3版本

2、mysql-connector-net:.net连接Mysql的程序,推荐6.8.3,版本。如果安装高版本可能导致一系列问题。详见:http://blog.csdn.net/niewq/article/details/41877301。

2、新建ADO.NET实体数据模型

2、1、按图操作,添加实体数据模型:

2.2、一切进展貌似都很顺利。接下来你可能会看到Visual Studio给出了如下的提示:

2.3、解决方法:在NuGet的控制台输入以下命令:

Install-Package EntityFramework -Version 6.0.0

Install-Package EntityFramework.zh-Hans -Version 6.0.0

Install-Package MySql.Data.Entity.EF6

每个命令输入之后按回车执行,你会发现前两个都很顺利,但是第三个却报错了:

此时我们不通过NuGet添加这个引用,具体步骤为将MySQL Connector Net 6.8.3\Assemblies\v4.5(视你的项目使用的.net版本而定,我的是.net 4.5)下的所有dll文件引用进来。我的机器上安装目录如下:

全部引用

然后在应用程序配置文件中添加:

然后,一定要重新生成项目!!!

2.4、继续下面的步骤,成功。

3、Mysql数据库改动

接下来,就是从数据库选择表以生成EDMX文件,但是在此过程中,你可能会遇到下列问题:

VS给出了一堆的提示,但是重点就是红框内的:表“TableDetails”中列“IsPrimaryKey”的值为 DBNull。这个问题的解决方案在这。我们按照文中所说,设置数据库testbak(我用的数据库):

1、重启数据库服务器。

2、use testbak;

3、set global optimizer_switch='derived_merge=OFF';

再去尝试一次,成功!!!

解决方案窗口多了很多文件:

每个实体数据模型生成一个context类,数据库每个表生成一个entity类。在Model1.edmx中包含的两个重要的文件Model1.Context.tt和Model1.tt。第一个是用于生成Context类的T4模板,第二是用于生成表映射实体类(POCO类,POCO:Plain Old CLR Object)的T4模板。

Model1.Context.cs是从System.Data.Entity.DbContext类继承。EF4.1中则是从ObjectContext类继承。DbContext类与ObjectContext类似,它对ObjcetContext类进行包装更利于开发的三种模式:CodeFirst、Model First、Database First。

4、DbContext

DbContext是EntityFramework很重要的部分,连接域模型与数据库的桥梁,是与数据库通信的主要类。

DbContext主要负责以下活动:

EntitySet::DbContext包含了所有映射到表的entities

Querying:将Linq-To-Entities转译为Sql并发送到数据库

Change Tracking:从数据库获取entities后保留并跟踪实体数据变化

Persisting Data:根据entity状态执行Insert、update、delete命令

Caching:DbContext的默认第一级缓存,在上下文中的生命周期中存储entity

Manage Relationship:DbContext在DbFirst模式中使用CSDL、MSL、SSDL管理对象关系,Code first中使用fluent api 管理关系

Object Materialization:DbContext将物理表转成entity实例对象

//DbContext实例化:

using (var ctx =newSchoolDBEntities())

{//Can perform CRUD operation using ctx here..

}//将DbContext转为ObjectContext

using (var ctx =newSchoolDBEntities())

{var objectContext = (ctx asSystem.Data.Entity.Infrastructure.IObjectContextAdapter).ObjectContext;//use objectContext here..

}

5、增删改查操作

5.1 IDAL

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Linq.Expressions;usingSystem.Text;usingSystem.Threading.Tasks;namespaceADO.NETEFDemo

{public interface IDAL where T : class,new()

{///

///增///

///

///

intAdd(T model);///

///删///

///

///

int Delete(Expression>whereLambda);///

///改///

///

///

///

///

int Update(Expression> whereLambda, string[] propertyNames, object[] perpertyValues);///

///查///

///

///

List GetModelList(Expression>whereLambda);

}

}

5.2 DAL

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Linq.Expressions;usingSystem.Reflection;usingSystem.Text;usingSystem.Threading.Tasks;namespaceADO.NETEFDemo

{public class DAL : IDAL where T : class,new()

{///

///增///

///

///

public intAdd(T model)

{using (testbakEntities db = newtestbakEntities())

{

db.Set().Add(model);returndb.SaveChanges();

}

}///

///删///

///

///

public int Delete(Expression>whereLambda)

{using (testbakEntities db = newtestbakEntities())

{var dbQuery = db.Set();//先查询 对应表的 集合

var list =dbQuery.Where(whereLambda).ToList();//遍历集合 里要删除的元素

foreach (var item inlist)

{//标记为 删除状态

dbQuery.Remove(item);

}returndb.SaveChanges();

}

}///

///改///

///

///

///

///

public int Update(Expression> whereLambda, string[] propertyNames, object[] perpertyValues)

{using (testbakEntities db = newtestbakEntities())

{//1、查询要修改的对象集合

var list = db.Set().Where(whereLambda).ToList();//2、获取要修改的对象的类型

Type t = typeof(T);//3、循环要修改的实体对象,并根据要修改的属性名修改对象对应的属性值

foreach (var item inlist)

{//循环 要修改的属性 名称, 并 反射取出 t 中的 属性对象

for (int index = 0; index < propertyNames.Length; index++)

{//获取要修改的属性名

string pName =propertyNames[index];//获取属性对象

PropertyInfo pi =t.GetProperty(pName);//调用属性对象的 SetValue方法 为当前循环的 item对象 对应的属性赋值

pi.SetValue(item, perpertyValues[index], null);

}

}returndb.SaveChanges();

}

}///

///查///

///

///

public List GetModelList(Expression>whereLambda)

{using (testbakEntities db = newtestbakEntities())

{return db.Set().Where(whereLambda).ToList();

}

}

}

}

5.3 BLL

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Linq.Expressions;usingSystem.Text;usingSystem.Threading.Tasks;namespaceADO.NETEFDemo

{public static class BLL where T : class,new()

{private static IDAL dal = new DAL();///

///新增///

///

public static intAdd(T model)

{returndal.Add(model);

}///

///删除///

///

public static int Delete(Expression>whereLambda)

{returndal.Delete(whereLambda);

}///

///修改///

///

///

///

///

public static int Update(Expression> whereLambda, string[] propertyNames, object[] perpertyValues)

{returndal.Update(whereLambda, propertyNames, perpertyValues);

}///

///查询///

///

///

public static List GetModelList(Expression>whereLambda)

{returndal.GetModelList(whereLambda);

}

}

}

5.4 调用

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceADO.NETEFDemo

{classProgram

{static void Main(string[] args)

{

GetArticleList();

AddArticle();

GetArticleList();

UpdateArticle();

GetArticleList();

DeleteArticel();

GetArticleList();

Console.ReadKey();

}///

///更新///

private static voidUpdateArticle()

{int result = BLL.Update(e=> e.title.Contains("EF"), new[] { "title", "update_time"},new object[] { "我是使用EF修改过标题的文章", DateTime.Now });if (result >= 0)

{

Console.WriteLine("更新成功");

}else{

Console.WriteLine("更新失败");

}

Console.WriteLine();

}///

///删除///

private static voidDeleteArticel()

{int result = BLL.Delete(e => e.title.Contains("EF"));if (result >= 0)

{

Console.WriteLine("删除成功");

}else{

Console.WriteLine("删除失败");

}

Console.WriteLine();

}///

///新增///

private static voidAddArticle()

{

t_crobot_reship_articles model= newt_crobot_reship_articles();

model.create_time=DateTime.Now;

model.module_id= 1;

model.adword_id= 20;

model.pick_id= 1;

model.vote_id= "1";

model.title= "我是使用EF添加的文章";

model.content_id= 1;

model.release_url= "http://www.sss.com";

model.state= true;int result = BLL.Add(model);if (result >= 0)

{

Console.WriteLine("新增成功");

}else{

Console.WriteLine("新增失败");

}

Console.WriteLine();

}///

///获取文章列表///

private static voidGetArticleList()

{

List articleList = BLL.GetModelList(e=> e.state == true);

Console.WriteLine("文章总数:" +articleList.Count.ToString());foreach (t_crobot_reship_articles model inarticleList)

{

Console.WriteLine("标题:" +model.title);

}

Console.WriteLine();

}

}

}

5.5 结果

6、小结

具体的操作步骤并不一定按文中所述的来。

连接mysql数据库2013_使用VS2013 + EF6 + .NET4.5 连接Mysql数据库相关推荐

  1. [原创]VS2013 EF6连接MySql需要几步?

    精简的美丽...... 1.安装mysql server 下载地址 http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.21-winx64.zip 注 ...

  2. 应用程序 mysql 连接_学生信息管理系统之四:实现应用程序与数据库的连接

    我们通过JDBC实现Java应用程序与数据库的连接. 类ConnectionManagr完成与数据库的连接.关闭等基本操作. 1. 新建类文件ConnectionManagr.java,所属包为com ...

  3. web和mysql连接并增删改查_Java Web 使用IDEA对mysql数据库进行简单增删改查操作(附源码下载)...

    一.加载数据库驱动 1.下载jdbc(如已下载可略过此步骤) (1)点击下载网址,选择Connector/J (2)选择Platform Independent版本 (3)下载下图所示的压缩包 2.将 ...

  4. mysql数据库断开连接_解决mysql服务器在无操作超时主动断开连接的情况

    我们在使用mysql服务的时候,正常情况下,mysql的设置的timeout是8个小时(28800秒),也就是说,如果一个连接8个小时都没有操作,那么mysql会主动的断开连接,当这个连接再次尝试查询 ...

  5. deepin中mysql数据库的连接_教你如何典雅的用Python连接MySQL数据库

    简介:作者 | Python语音识别不管是机器学习.web开发或者爬虫,数据库都是绕不过去的.那么今天我们就来介绍Python如何Mysql数据库进行连接以及数据的交换.主要分为以下几个方面:什么是数 ...

  6. python连接不上数据库_绕不过去的Python连接MySQL数据库

    本文首发于<深度学习与Python> 不管是机器学习.web开发或者爬虫,数据库都是绕不过去的.那么今天我们就来介绍Python如何Mysql数据库进行连接以及数据的交换.主要分为以下几个 ...

  7. sqlalchemy连接mysql数据库_史上超详细的flask_sqlalchemy连接mysql数据库

    Python+Flask安装:https://www.jianshu.com/p/cd1925e90eda Flask路径参数以及请求参数讲解:https://www.jianshu.com/p/54 ...

  8. mysql 动态加载数据库数据库连接,如何根据每个客户端动态连接mysql数据库?

    我在这里使用mean stack m=mysql构建一个saas产品 我使用sequelize作为orm for mysql,我的连接: const sequelize = new Sequelize ...

  9. 0配置EF连接MySql数据库_第八节:EF Core连接MySql数据库

    一. 前提 1.安装EF Core连接MySQL的驱动,这里有两类: (1).Oracle官方出品:MySql.Data.EntityFrameworkCore (版本:8.0.17) (2).其他第 ...

最新文章

  1. Linux 查看文件大小
  2. 快速整理excel_3小时整理了33个excel动图技巧,能快速提高工作效率,收藏备用吧...
  3. 一个教务系统多少钱_销售管理系统报价多少钱
  4. Struts2学习第七课 ActionSupport
  5. why debug log could not be displayed in console
  6. 我的世界1 11java,Editing Java版Alpha v1.0.11
  7. BCVP开发者说第5期:QuartzCore.Blazor
  8. [css] 写出div在不固定高度的情况下水平垂直居中的方法?
  9. 【youcans 的 OpenCV 例程200篇】157. 霍夫变换直线检测
  10. python end用法在固定位置换行_在Python中链接方法时,换行的样式正确
  11. Linux驱动(14)--字符类设备与驱动
  12. cocos2dx中关于Action动作的相关API的具体介绍
  13. AndroidStudio更改默认编码(不用每次新建项目再更改编码了)
  14. java settitle 源码_在其他初始化方法中折叠工具栏的setTitle - java代码 - 源码查
  15. 今日写代码遇到的https请求的时候,提示ssl证书错误
  16. ssh整合之三(实现逻辑)
  17. ALFA深度学习软件金属外观缺陷检测应用
  18. 解决Linux无法读写U盘中的NTFS问题
  19. 谈谈This对象的理解
  20. 花生壳 linux客户端 命令

热门文章

  1. .net core grpc consul 实现服务注册 服务发现 负载均衡(二)
  2. .Net 4.X 提前用上 .Net Core 的配置模式以及热重载配置
  3. 在Docker中运行asp.net core 跨平台应用程序
  4. 使用 JavaScriptService 在.NET Core 里实现DES加密算法
  5. 实验2 java_《Java程序设计》实验2
  6. 调试 不弹出 小米_时隔六年,小米NFC碰碰贴复活,碰一下自动亮灯、联网、投屏...
  7. SignalR ——Android实践
  8. 【ArcGIS微课1000例】0020:关于ArcCatalog,你知道多少?
  9. 用dataGridView实现增删改查
  10. Android之解决AppBarLayout 下面一道阴影