C# 使用EntityFramework連線MySql
本文來自 fairjm@ituring.com.cn
轉截請註明出處
本來想用F#的....結果失敗了 去爆棧提了個問題...暫時沒人解答...所以還是用C#吧...哎
為什麼要連MySql,因為Sql Server開箱即用,而且工作中用的是mysql,取資料分析用ADO.NET有點累,一切面向偷懶.
框架使用EF,版本用最新的,一步一步往下做.
因為就是個示例專案所以用good old的Console Application
就行啦.
空專案如下:
新增依賴,右擊References
,選擇Manage NuGet Packages
,選擇browse.搜尋EntityFramework
和Mysql.Data.Entity
,全部選最新版本. 一路點Yes,accept就好了.
此時package的依賴變成了這樣:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.1.3" targetFramework="net452" />
<package id="MySql.Data" version="6.9.8" targetFramework="net452" />
<package id="MySql.Data.Entity" version="6.9.8" targetFramework="net452" />
</packages>
App.config也變得豐盈了起來:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<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">
</provider>
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
</configuration>
依賴搞定,接下來新增實體物件,這裡就不手工寫了,手工寫無非是將連線字串配在App.config下,自己繼承下DbContext,手寫實體類.太累.還是那句話,面向懶惰程式設計.
右擊專案,add -> new item -> data -> ADO.NET Entity Data Model
名字自己取一個
然後按以下步驟新增:
關於Port,請點選上圖中的Advanced,在裡面找到Port選項.
按ok之後.
如果你用的依賴項和我一樣,而且裝mysql的時候還裝了.NET的連線,那肯定就是直接退出了.對,你沒看錯,直接退出.
把Nuget的包變成和本地版本一樣(自己匯入引用或者去mysql官網下最新的 那個Mysql Installer不能升級到最新的不知道為什麼),不然點next依舊閃退.
接下來看到了令人激動的這個介面:
當點選完成的時候,WTF:
這其實是個bug,mysql的bug... ...解決方法很簡單,要把mysql的一個優化項給關了.
http://stackoverflow.com/questions/33575109/mysql-entity-the-value-for-column-isprimarykey-in-table-tabledetails-is
- Open Services (services.msc) and restart MySQL57 service.
- Execute the following commands in MySQL. use database_name;
set global optimizer_switch='derived_merge=OFF';- Update the .edmx.
接下來就好了...可以看到Designer了
接下來就可以愉快地寫程式碼啦~~~
注意如果提示初始化錯誤,檢查一下DbContext裡的初始化引數的值和app.config的連線字串配置是否相同
其實整個過程是比較簡單的.
這裡有幾點注意
本地如果裝了.NET驅動,要注意和依賴包的版本保持一致
那個坑爹的bug
code first也比較簡單.
但也有幾點要注意,這裡有點晚了,我懶得寫具體過程了.....
一定要從空的資料庫初始化,不要有表,不要有表,不要有表... 不然會發生奇怪的事的,是什麼奇怪的事,我不說,你們猜.
請把[DbConfigurationType(typeof(MySqlEFConfiguration))]
寫在DbContext子類上(或者改配置檔案) 這一項是code first生成的程式碼裡沒有的.
然後就可以愉快地commit和update資料庫了.
本文終結
本文來自 fairjm@ituring.com.cn
轉截請註明出處
相關文章
- 使用pyMySql 連線mysqlMySql
- 使用C#連線資料庫C#資料庫
- 使用mysqlclient庫連線mysqlMySqlclient
- C#連線MySQL8.0資料庫失敗C#MySql資料庫
- 使用PETAPOCO連線MYSQL資料庫MySql資料庫
- 使用cmd連線mysql資料庫MySql資料庫
- Django使用pymysql連線MySQL資料庫DjangoMySql資料庫
- Python 連線 MySQLPythonMySql
- python連線MySQLPythonMySql
- IDEA連線MySQLIdeaMySql
- GO 連線 MySQLGoMySql
- C連線MySQLMySql
- JDBC連線mysqlJDBCMySql
- MYSQL語法:左連線、右連線、內連線、全外連線MySql
- MySQL筆記3——內連線/外連線、多表連線MySql筆記
- EntityFramework使用及優化Framework優化
- C#連線資料庫C#資料庫
- C#連線SQLite的字串C#SQLite字串
- Hadoop(五)C#連線HiveHadoopC#Hive
- 使用RMySQL包來連線MySQL資料庫MySql資料庫
- 檢視使用 MySQL Shell 的連線狀態MySql
- 允許mysql遠端使用者連線。MySql
- mysql使用命令列連線伺服器MySql命令列伺服器
- 用c#建立與資料庫的連線 c#連sqlserverC#資料庫SQLServer
- linux下mysql安裝、授權、建立使用者、連線navicat、連線entityLinuxMySql
- CodeSmith 一、連線MysqlMITMySql
- JPA配置mysql連線MySql
- kettle連線本地MYSQLMySql
- Java JDBC連線MYsqlJavaJDBCMySql
- MySQL連線數管理MySql
- 06 建立MySQL連線MySql
- python基礎學習24—-使用pymysql連線mysqlPythonMySql
- mysql INNER JOIN、LEFT JOIN、RIGHT JOIN;內連線(等值連線)、左連線、右連線MySql
- C#中的連線池管理C#
- mysql階段04 連線工具, 連線方式, 啟動關閉mysqlMySql
- python 怎麼連線 sql server,不是連線 mysqlPythonServerMySql
- 連線mysql時提示is not allowed to connect不允許連線MySql
- mac開啟mysql,navicat連線mysqlMacMySql
- 使用EF 連線 資料庫 SQLserver、MySql 實現 CodeFirst資料庫ServerMySql