日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時間:2023/12/4 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 连接mysql数据库2013_使用VS2013 + EF6 + .NET4.5 连接Mysql数据库 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、安裝插件

在使用Visual Studio 2013添加ADO.NET實體數(shù)據(jù)模型新建連接時,默認(rèn)是沒有Mysql選項的。此時我們需要安裝兩個東西:

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

2、mysql-connector-net:.net連接Mysql的程序,推薦6.8.3,版本。如果安裝高版本可能導(dǎo)致一系列問題。詳見:http://blog.csdn.net/niewq/article/details/41877301。

2、新建ADO.NET實體數(shù)據(jù)模型

2、1、按圖操作,添加實體數(shù)據(jù)模型:

2.2、一切進(jìn)展貌似都很順利。接下來你可能會看到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

每個命令輸入之后按回車執(zhí)行,你會發(fā)現(xiàn)前兩個都很順利,但是第三個卻報錯了:

此時我們不通過NuGet添加這個引用,具體步驟為將MySQL Connector Net 6.8.3\Assemblies\v4.5(視你的項目使用的.net版本而定,我的是.net 4.5)下的所有dll文件引用進(jìn)來。我的機(jī)器上安裝目錄如下:

全部引用

然后在應(yīng)用程序配置文件中添加:

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

2.4、繼續(xù)下面的步驟,成功。

3、Mysql數(shù)據(jù)庫改動

接下來,就是從數(shù)據(jù)庫選擇表以生成EDMX文件,但是在此過程中,你可能會遇到下列問題:

VS給出了一堆的提示,但是重點就是紅框內(nèi)的:表“TableDetails”中列“IsPrimaryKey”的值為 DBNull。這個問題的解決方案在這。我們按照文中所說,設(shè)置數(shù)據(jù)庫testbak(我用的數(shù)據(jù)庫):

1、重啟數(shù)據(jù)庫服務(wù)器。

2、use testbak;

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

再去嘗試一次,成功!!!

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

每個實體數(shù)據(jù)模型生成一個context類,數(shù)據(jù)庫每個表生成一個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類進(jìn)行包裝更利于開發(fā)的三種模式:CodeFirst、Model First、Database First。

4、DbContext

DbContext是EntityFramework很重要的部分,連接域模型與數(shù)據(jù)庫的橋梁,是與數(shù)據(jù)庫通信的主要類。

DbContext主要負(fù)責(zé)以下活動:

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

Querying:將Linq-To-Entities轉(zhuǎn)譯為Sql并發(fā)送到數(shù)據(jù)庫

Change Tracking:從數(shù)據(jù)庫獲取entities后保留并跟蹤實體數(shù)據(jù)變化

Persisting Data:根據(jù)entity狀態(tài)執(zhí)行Insert、update、delete命令

Caching:DbContext的默認(rèn)第一級緩存,在上下文中的生命周期中存儲entity

Manage Relationship:DbContext在DbFirst模式中使用CSDL、MSL、SSDL管理對象關(guān)系,Code first中使用fluent?api 管理關(guān)系

Object Materialization:DbContext將物理表轉(zhuǎn)成entity實例對象

//DbContext實例化:

using (var ctx =newSchoolDBEntities())

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

}//將DbContext轉(zhuǎn)為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();//先查詢 對應(yīng)表的 集合

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

foreach (var item inlist)

{//標(biāo)記為 刪除狀態(tài)

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、循環(huán)要修改的實體對象,并根據(jù)要修改的屬性名修改對象對應(yīng)的屬性值

foreach (var item inlist)

{//循環(huán) 要修改的屬性 名稱, 并 反射取出 t 中的 屬性對象

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

{//獲取要修改的屬性名

string pName =propertyNames[index];//獲取屬性對象

PropertyInfo pi =t.GetProperty(pName);//調(diào)用屬性對象的 SetValue方法 為當(dāng)前循環(huán)的 item對象 對應(yīng)的屬性賦值

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 調(diào)用

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修改過標(biāo)題的文章", 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("文章總數(shù):" +articleList.Count.ToString());foreach (t_crobot_reship_articles model inarticleList)

{

Console.WriteLine("標(biāo)題:" +model.title);

}

Console.WriteLine();

}

}

}

5.5 結(jié)果

6、小結(jié)

具體的操作步驟并不一定按文中所述的來。

總結(jié)

以上是生活随笔為你收集整理的连接mysql数据库2013_使用VS2013 + EF6 + .NET4.5 连接Mysql数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。