EF添加ADO.NET實體模型處直接選擇Mysql數據源
最近想到EF是連接多數據庫的orm框架,于是就想測試下。查了一堆網上資料后,測試連接mysql成功。步驟如下:
1、在你項目Model層中nuget安裝MySql.Data.Entity
?
如果沒安裝這個provider 就進行下面的步驟。就會出現:
?
2、MySql官網下載mysql-installer-community-5.7.13.0
?
我這邊是沒安裝過mysql,所以是安裝全部,第一個選項,MySql Installer。主要目的除了安裝mysql,就是安裝mysql對于vs的數據源驅動,便于我們在新建ADO.NET實體模型的時候,選擇對應的數據源(MySQL Database)。
3、安裝好后,我這個傳說中的window程序員必須要下個圖形化管理界面。
?
然后里面新建個數據庫,測試用。
4、接下來就可以進行測試啦~~~
首先在VS中新建個類庫,這個不多說了,新建項目-->ADO.NET實體模型
?
新建連接
?
更改數據源
選擇MySQL Database
Server name:localhost
用戶名密碼就不多說了。
然后就開始選擇表進行實體映射,然后問題就出來了~~~
很奇怪哦,我們壓根沒這個TableDetails這個表,又哪兒來的主鍵類型為null。
百度!無所不能的網友給出了個解決問題的網址——>stakoverflow:
http://stackoverflow.com/questions/33575109/mysql-entity-the-value-for-column-isprimarykey-in-table-tabledetails-is
?
老外回答簡潔,靠譜。
根據這回答咋操作呢?直接扔截圖吧。
打開mysql的cmd窗口
use test;
set global optimizer_switch='derived_merge=OFF';
問題解決~~~~
這里注意(對于不熟悉mysql命令行的同志,比如我):結尾一定加分號!!!
上文測試用的數據庫test下的school表就映射成功勒
完美~~~
提問:對于oracle,postgresql,這些數據庫我也下載了,可能選擇更改數據源的時候沒有出來這些選項,這是需要我們單獨去安裝的嗎?哪兒安裝?找不到....
?相關節點配置(個人紀錄):
1、UI的webconfig配置數據庫連接字符串肯定是少不了的。(連接字符串在我們Model層創建ADO.NET實體模型的時候就自動生成在了Model層的APPCONFIG中,拷貝過來即可)
<connectionStrings><!--mysql的數據庫連接字符串--><add name="MysqlEntities" connectionString="metadata=res://*/ModelMysql.csdl|res://*/ModelMysql.ssdl|res://*/ModelMysql.msl;provider=MySql.Data.MySqlClient;provider connection string="server=localhost;user id=joey;password=lovemary;persistsecurityinfo=True;database=test"" providerName="System.Data.EntityClient" /></connectionStrings>
2、nuget安裝MySql.Data.Entity只需在Model層中進行,但是跟連接字符串一樣,得再webconfig中定義一個節點,節點里面寫路徑方便程序去讀取相關信息。
在entityFramework節點下添加MySql.Data.MySqlClient(System.Data.SqlClient是我們在UI nuget EntityFramework的時候自動加載的,sqlserver的驅動信息)
MySql.Data.MySqlClient同樣我們在Model層nuget?MySql.Data.Entity后就加進了APPCONFIG中,拷貝到UI的webconfig即可。(若嫌麻煩,就直接在UI層也nuget?MySql.Data.Entity,節點就自動加上去了)
<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" /><provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /></providers></entityFramework>
?
?