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
轉截請註明出處
相關文章
- 使用ABP EntityFramework連線MySQL資料庫FrameworkMySql資料庫
- 自連線<EntityFramework6.0>Framework
- 使用pyMySql 連線mysqlMySql
- 使用C#連線資料庫C#資料庫
- 使用mysql的長連線MySql
- mysql之使用SSL連線MySql
- 使用mysqlclient庫連線mysqlMySqlclient
- EntityFramework 多資料庫連結,MySql,SqlServer,Oracel等Framework資料庫MySqlServer
- C#連線MySQL8.0資料庫失敗C#MySql資料庫
- MySQL 使用 SSL 連線(附 Docker 例子)MySqlDocker
- 在JBOSS中使用mysql連線池MySql
- vs2012載入EntityFrameWork框架,連線OracelFramework框架
- EntityFramework系列:MySql的RowVersionFrameworkMySql
- Django使用pymysql連線MySQL資料庫DjangoMySql資料庫
- 使用PETAPOCO連線MYSQL資料庫MySql資料庫
- MFC 使用VS 連線 MySQL資料庫MySql資料庫
- Oracle使用DG4ODBC連線MySQLOracleMySql
- MYSQL語法:左連線、右連線、內連線、全外連線MySql
- GO 連線 MySQLGoMySql
- JDBC連線mysqlJDBCMySql
- mysql 連線oracleMySqlOracle
- MySQL字串連線MySql字串
- C連線MySQLMySql
- MySQL筆記3——內連線/外連線、多表連線MySql筆記
- mysql使用命令列連線伺服器MySql命令列伺服器
- 使用RMySQL包來連線MySQL資料庫MySql資料庫
- 允許mysql遠端使用者連線。MySql
- 使用 ProxySQL 改進 MySQL SSL 的連線效能MySql
- 檢視使用 MySQL Shell 的連線狀態MySql
- C#連線資料庫C#資料庫
- C#連線SQLite的字串C#SQLite字串
- mysql 左連線,右連線,內連結,exists等MySql
- JPA配置mysql連線MySql
- Python 連線 MySQLPythonMySql
- MySQL連線數管理MySql
- 06 建立MySQL連線MySql
- Java JDBC連線MYsqlJavaJDBCMySql
- kettle連線本地MYSQLMySql