之前介紹EF時介紹了provider這個配置項,而且也介紹了在ASP.NET訪問MySQL數據仍然是通過ADO.NET,不同的地方僅僅是更換了MySQL的數據提供器,那麼在EF中是否也只需更換“提供器”就可以了呢?
接下來就通過以下兩點,看一下Entity Framework是如何連接使用My SQL數據庫的:
●必要組件的安裝
●DBContext的創建與應用
必要組件的安裝
1. 通過Nuget安裝Entity Framework組件到BlogRepository.MySQL項目上:
2. 在BlogRepository.MySQL項目中引入MySql.Data.Entity.EF6:
EF作爲主要組件是必須安裝的,只不過EF中只包含了SQL Server相關組件不包含MySQL的,所以還需安裝並引入MySql.Data.Entity.EF6,安裝MySQL組件的方式有兩種,一種是安裝Connector/NET,然後在引用管理器中找到:
而另一種方式是通過Nuget包管理器安裝:
DBContext的創建與應用
1. 創建一個DBContext:
2. 在DBContext類型上使用MySqlEFConfiguration類型:
使用MySqlEFConfiguration類型是官方建議的,因爲該類型中添加了所有與Mysql類型相關的組件,或者在自定義Configuration類型中調用AddDependencyResolver(new MySqlDependencyResolver())方法自行添加,被添加的組件有:
● DbProviderFactory -> MySqlClientFactory
● IDbConnectionFactory -> MySqlConnectionFactory
● MigrationSqlGenerator -> MySqlMigrationSqlGenerator
● DbProviderServices -> MySqlProviderServices
● IProviderInvariantName -> MySqlProviderInvariantName
● IDbProviderFactoryResolver -> MySqlProviderFactoryResolver
● IManifestTokenResolver -> MySqlManifestTokenResolver
● IDbModelCacheKey -> MySqlModelCacheKeyFactory
● IDbExecutionStrategy -> MySqlExecutionStrategy
當然也可以自定義一個Configuration類型,在文章最前面提到的替換Provider:
以同樣的方式將這個自定義類型應用到DbConfigurationType特性中:
3. 修改BlogRepository,將使用SQL改爲使用EF:
4. 添加MySql的連接字符串:
DbContext類型會自動在配置文件的connectionString節點中查找名稱與其類型名稱一致的連接字符串並使用。
注:name與DbContext類型一致並且providerName是MySql.Data.MySqlClient,這與SQL Server不一致,需要特定的程序來解析和使用連接字符串。
5. 運行程序:
注:運行正常是因爲DbContext類型中使用了MySqlEFConfiguration類型,該類型位於MySql.Data.Entity.EF6.dll程序集,所以主項目編譯的時候也會將該程序集包含進來,而不會出現程序集缺失的情況。
小結
本章介紹瞭如何使用EF來使用MySQL數據庫,與SQL Server區別較大的就是需要引入MySQL相關的程序集然後使用MySQL的數據提供器,這樣EF就可以用來操作MySQL數據庫了,而這個替換的操作是通過在DBContext類型上使用DbConfigurationType特性來實現的。
通過幾篇對ASP.NET訪問數據庫及EF使用的介紹,可能會發現一些問題就是關於EF的配置:
- 安裝EF組件時就會動態創建配置信息,但是這些配置又可以不用。
- 可以使用代碼的形式(DbConfigurationType特性)來指定配置。
- DbContext的連接字符可以通過基類構造方法傳入。
- DbContext的連接字符串可以讀取配置文件中與其類型名稱對應的配置。
對於以上問題將在下一篇文章中統一介紹。
歡迎添加個人微信號:Like若所思。
歡迎關注我的公衆號,不僅爲你推薦最新的博文,還有更多驚喜和資源在等着你!一起學習共同進步!