连接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、按图操作,添加实体数据模型:
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数据库相关推荐
- [原创]VS2013 EF6连接MySql需要几步?
精简的美丽...... 1.安装mysql server 下载地址 http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.21-winx64.zip 注 ...
- 应用程序 mysql 连接_学生信息管理系统之四:实现应用程序与数据库的连接
我们通过JDBC实现Java应用程序与数据库的连接. 类ConnectionManagr完成与数据库的连接.关闭等基本操作. 1. 新建类文件ConnectionManagr.java,所属包为com ...
- web和mysql连接并增删改查_Java Web 使用IDEA对mysql数据库进行简单增删改查操作(附源码下载)...
一.加载数据库驱动 1.下载jdbc(如已下载可略过此步骤) (1)点击下载网址,选择Connector/J (2)选择Platform Independent版本 (3)下载下图所示的压缩包 2.将 ...
- mysql数据库断开连接_解决mysql服务器在无操作超时主动断开连接的情况
我们在使用mysql服务的时候,正常情况下,mysql的设置的timeout是8个小时(28800秒),也就是说,如果一个连接8个小时都没有操作,那么mysql会主动的断开连接,当这个连接再次尝试查询 ...
- deepin中mysql数据库的连接_教你如何典雅的用Python连接MySQL数据库
简介:作者 | Python语音识别不管是机器学习.web开发或者爬虫,数据库都是绕不过去的.那么今天我们就来介绍Python如何Mysql数据库进行连接以及数据的交换.主要分为以下几个方面:什么是数 ...
- python连接不上数据库_绕不过去的Python连接MySQL数据库
本文首发于<深度学习与Python> 不管是机器学习.web开发或者爬虫,数据库都是绕不过去的.那么今天我们就来介绍Python如何Mysql数据库进行连接以及数据的交换.主要分为以下几个 ...
- sqlalchemy连接mysql数据库_史上超详细的flask_sqlalchemy连接mysql数据库
Python+Flask安装:https://www.jianshu.com/p/cd1925e90eda Flask路径参数以及请求参数讲解:https://www.jianshu.com/p/54 ...
- mysql 动态加载数据库数据库连接,如何根据每个客户端动态连接mysql数据库?
我在这里使用mean stack m=mysql构建一个saas产品 我使用sequelize作为orm for mysql,我的连接: const sequelize = new Sequelize ...
- 0配置EF连接MySql数据库_第八节:EF Core连接MySql数据库
一. 前提 1.安装EF Core连接MySQL的驱动,这里有两类: (1).Oracle官方出品:MySql.Data.EntityFrameworkCore (版本:8.0.17) (2).其他第 ...
最新文章
- Linux 查看文件大小
- 快速整理excel_3小时整理了33个excel动图技巧,能快速提高工作效率,收藏备用吧...
- 一个教务系统多少钱_销售管理系统报价多少钱
- Struts2学习第七课 ActionSupport
- why debug log could not be displayed in console
- 我的世界1 11java,Editing Java版Alpha v1.0.11
- BCVP开发者说第5期:QuartzCore.Blazor
- [css] 写出div在不固定高度的情况下水平垂直居中的方法?
- 【youcans 的 OpenCV 例程200篇】157. 霍夫变换直线检测
- python end用法在固定位置换行_在Python中链接方法时,换行的样式正确
- Linux驱动(14)--字符类设备与驱动
- cocos2dx中关于Action动作的相关API的具体介绍
- AndroidStudio更改默认编码(不用每次新建项目再更改编码了)
- java settitle 源码_在其他初始化方法中折叠工具栏的setTitle - java代码 - 源码查
- 今日写代码遇到的https请求的时候,提示ssl证书错误
- ssh整合之三(实现逻辑)
- ALFA深度学习软件金属外观缺陷检测应用
- 解决Linux无法读写U盘中的NTFS问题
- 谈谈This对象的理解
- 花生壳 linux客户端 命令
热门文章
- .net core grpc consul 实现服务注册 服务发现 负载均衡(二)
- .Net 4.X 提前用上 .Net Core 的配置模式以及热重载配置
- 在Docker中运行asp.net core 跨平台应用程序
- 使用 JavaScriptService 在.NET Core 里实现DES加密算法
- 实验2 java_《Java程序设计》实验2
- 调试 不弹出 小米_时隔六年,小米NFC碰碰贴复活,碰一下自动亮灯、联网、投屏...
- SignalR ——Android实践
- 【ArcGIS微课1000例】0020:关于ArcCatalog,你知道多少?
- 用dataGridView实现增删改查
- Android之解决AppBarLayout 下面一道阴影