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

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、按图操作,添加实体数据模型:

2b166fde2b678171c1293b88ae8e9860.png

4ff9885cd8e561f2873268116a1534a2.png

2453be6452e159beb67c5e7481806505.png

c79d61cb68a0cceb94384b81c95501b5.png

9f3ad6654387a46c8808403c0e48cc15.png

23cceeb8f06af3a11ffa94e9053e6a58.png

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

fdb4f5245a19d5ac2187621863c097c2.png

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

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

14aaae6d6de84f4d5edab499f8094870.png

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

e7e87387cf416f5f6015d60c68750e9b.png

全部引用

7ae558812b4f334c2f6e9fc0da13be88.png

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

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

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

8128db785b4688f3c564a4d10d9ab607.png

3、Mysql数据库改动

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

5cd7ce17714200dc02187672e44d6982.png

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

1、重启数据库服务器。

2、use testbak;

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

a1ffd877490e196aef32d32de39efbc8.png

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

41c553dd72b972b549e1fa6611efcb3f.png

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

5dca98af88432b45ae177314473add29.png

每个实体数据模型生成一个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很重要的部分,连接域模型与数据库的桥梁,是与数据库通信的主要类。

1bfb75f1141d4dcddf5365777df4e40b.png

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 结果

8c059d1ba9c6de3b66d2772988d67970.png

6、小结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重磅来袭,2018 年 6 月编程语言排行榜

TIOBE 编程语言社区最新发布了 2018 年 6 月排行榜&#xff0c;和 5 月榜单相比&#xff0c;前九名没有任何变化&#xff0c;依然是 Java、C、C、Python、C#、Visual Basic .NET、PHP、JavaScript、SQL。5月份第十名的Ruby在这个月下降了一名&#xff0c;而R则上升一名&#xf…

mysql bench linux_MySQL Study之--Linux下安装MySQL workbench工具

系统环境&#xff1a;操作系统&#xff1a; RedHat EL6.4(64)WorkBench&#xff1a; mysql-workbench-community-6.0.9MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具。它是著名的数据库设计工具DBDesigner4的继任者。你可以用MySQL Workbench设计和创建新的数据库图示…

.NET6发布了Preview2,这点超越过去10年!

从ASP.NET的性能诟病&#xff0c;到.NET Core的性能持续改进&#xff0c;在每一个.NET Core版本都能看到性能优化提升的介绍。.NET Core3.1在各种性能排行中霸榜&#xff0c;.NET5再度提升了性能&#xff0c;前些天发布的.NET Preview2&#xff0c;通过PGO &#xff08;Profile…

人工智能预测2018年世界杯 | 德国人打破历史将在俄罗斯上取得最后的胜利?

2018年俄罗斯世界杯近在眼前&#xff0c;比赛将于6月14日~7月15日在俄罗斯的各地举行。但世界杯还没开始&#xff0c;人们已经出现了各种各样的“比赛结果预测”。其中不乏有一些专业人士以及原足球选手&#xff0c;也有许多“生物”对此预测。前几年&#xff0c;章鱼哥保罗就准…

Q+开放的互联网:腾讯QQ “亮剑” 开放平台

&#xff08;图一&#xff09; 近日&#xff0c;人民日报的腾讯广告&#xff08;图一&#xff09;&#xff0c;在网民心中引起不小的波动。看着图中憨厚的小企鹅&#xff0c;后面是数以万计的应用软件&#xff0c;给人一种大将领兵征战沙场的感觉。图片左下角是 “Q开放的互联网…

php查询mysql乱码_php 查询mysql乱码怎么办

php查询mysql乱码的解决办法&#xff1a;1、修改PHP页面语言本身的编码类型&#xff1b;2、将MySQL字符集更改为“UTF8”&#xff1b;3、使用ultraplus中的编码转换功能进行转换。php读取mysql中文数据出现乱码的解决方法1.PHP页面语言本身的编码类型不合适&#xff0c;这时候&…

猝不及防,Google成功“造人”令人胆寒!人类迎来史上最惨失业潮…

01猝不及防&#xff01;这次&#xff0c;Google“造人”了&#xff01;5月8号&#xff0c;谷歌召开一年一度的Google I/O大会。谷歌CEO劈柴直接祭出了这次大会的王牌AI&#xff0c;这个智能过人的Al让人看完不禁倒吸一口凉气……相比Apple Siri和Microsoft Cortana只能机械式对…

雷军这个程序员!真的牛逼!

阅读本文大概需要3分钟。这两天忙着给CEO汇报工作以及跟进几个新产品的进展&#xff0c;忙到连新闻都没时间看。今天终于轻松了点&#xff0c;早上起来刷了刷知乎&#xff0c;看见一个让我惊呆了的消息&#xff1a;雷军要造车了&#xff01;雷军宣称亲自带队&#xff0c;初期就…

poj2545

题意&#xff1a;给出三个质数&#xff0c;求这素因子只有这三个质数的数中第k大的。 分析&#xff1a;用一个数列&#xff0c;第一位是1。用三个指针指向三个prime要乘的被乘数&#xff0c;最开始都指向1。每次取乘积最小的加入数组&#xff0c;并把指针后移。加入时要判断是否…

微软发布 Windows 10 预览版 Build 21343:此电脑和回收站等启用全新图标

微软已向开发频道&#xff08;Dev&#xff09;的 Windows 预览体验成员发布了 Windows 10 Insider Preview Build 21343 更新。内置应用和文件夹启用全新图标从去年开始&#xff0c;微软就不断为 Windows 10 内置应用重新设计图标。在 Windows 10 版本 20H2 更新中&#xff0c;…

什么样的程序员会让人讨厌

我有一个朋友&#xff0c;就是一个程序员&#xff0c;找他做事的时候&#xff0c;最让人讨厌了。00不愿意帮我修电脑。我说电脑坏了&#xff0c;想让他看看&#xff0c;他先是叫我检查插头&#xff0c;然后叫我重启&#xff0c;重启好之后&#xff0c;他冷淡的说&#xff1a;以…

金州勇士队,硅谷黑科技打造的NBA奇迹!

【导读&#xff1a;2018NBA决赛表明&#xff0c;创业如同打球&#xff0c;应该学习勇士&#xff0c;团队作战打“群架”&#xff0c;单打独斗像骑士&#xff0c;纵有“小皇帝”&#xff0c;也难免被横扫】NBA是中国人民最喜欢观看和讨论的美国体育联赛。在NBA诸强中&#xff0c…

入坑机器学习?送你一篇麻省博士的学习心得

[导读] 随着人工智能技术的火热&#xff0c;越来越多的年轻学者正准备投身其中&#xff0c;开启自己的研究之路。和所有其他学科一样&#xff0c;人工智能领域的新人总会遇到各种各样的难题&#xff0c;其中不仅有研究上的&#xff0c;也有生活方面的。MIT EECS 在读博士、前 V…

C# 读写Ini文件

ini文件在Win95以前比较盛行&#xff0c;之后由于出册表等技术的出现&#xff0c;ini技术主键退居二线&#xff0c;不过对于一些小项目&#xff0c;读写ini文件还是很适用的。Windows API提供了读写配置文件的操作&#xff0c;在C#程序中只要导入相应的API即可。例如GetPrivate…

更改windows2003远程最大连接数

windows 2003中的远程桌面功能非常方便&#xff0c;但是初始设置只允许2个用户同时登陆。有些时候因为我在公司连接登陆后断开&#xff0c;同事在家里用其他用户登陆后断开&#xff0c;当我再进行连接的时候&#xff0c;总是报错终端服务超过最大连接数。这时候我和同事都不能登…

mysql sp who_对ASE系统存储过程的剖析-sp_who

昨晚有空&#xff0c;把 sybase 系统过程 sp_who &#xff0c; DDL 后分析了一下&#xff0c;全文如下&#xff1a;-- 以下是 DDL 出来的内容&#xff1a;------------------------------------------------------------------------------- DDL for Stored procedure sybsyste…

区块链、自动驾驶、人工智能鏖战开始 谁将成为下一个风口?

近年来&#xff0c;区块链、自动驾驶以及人工智能的概念频繁爆红于科技界。有业者称&#xff0c;区块链的颠覆在于人们找到了一个低成本解决信任问题的方案&#xff1b;自动驾驶的出现方便了人们的交通出行&#xff1b;人工智能则为我们打开了新的世界。不论是区块链、自动驾驶…

JWT 介绍 - Step by Step

翻译自 Mohamad Lawand 2021年3月11日的文章 《Intro to JWT - Step by Step》 [1]在本文中&#xff0c;我将向您介绍 JWT[2]。我们今天要讲的内容包含&#xff1a;JWT 是什么我们应该在什么时候使用它JWT 与 Session Id 比较JWT 结构JWT 签名JWT 是什么JWT (JSON Web Token) 是…

Helpdesk 流程

最近Fox的公司部署了新的Helpdesk系统。为了让用户从原来打电话和发邮件寻求IT员工帮助的方式转变为使用Helpdesk系统提交tickets&#xff0c;需要制定和规范Helpdesk流程&#xff0c;小小推动下ITIL进程。 HelpDesk系统与AD集成。公司用户可以使用域用户名和密码登陆Helpdesk系…

vscode 快速调到定义处_vim技巧:在程序代码中快速跳转,在文件内跳转到变量定义处...

本篇文章介绍 vim 的一些使用技巧&#xff1a;在程序代码中快速跳转在文件内跳转到变量定义处在程序代码中快速跳转在 vim 中查看代码文件时&#xff0c;可以使用下面命令在程序代码中快速跳转&#xff0c;提高效率。%跳转到光标所在括号的另一个配对括号上&#xff0c;适用于小…