網上有不少關於EF在聯機狀況下利用nuget管理器安裝的案例,我就講一下脫機情況吧!mysql
一.創建一個文件夾,例如D:/Packagesweb
放入安裝EF和mysql須要的包:EntityFramework.6.1.3.nupkgsql
EntityFramework.Extended.6.1.0.133.nupkg數據庫
EntityFramework.zh-Hans.6.1.3.nupkg函數
MySql.Data.6.9.8.nupkg工具
MySql.Data.Entity.6.9.8.nupkg測試
MySql.Web.6.9.8.nupkgspa
(根據本身的版本放入本身創建的文件夾)orm
二.項目右鍵---管理NuGet程序包---設置---名稱(例如Package source)---源(找到本身放的Ef+mysql包的文件夾,例如以前的D:/Packages)---設置ok對象
三.vs的菜單項---工具---庫程序包管理器---程序包管理控制檯:(注意:若是有多個項目 ,在程序包管理控制檯--默認項目選擇本身要安裝的項目)
在PM>後輸入
Install-Package EntityFramework -Version 6.1.3(根據本身的版本號添加) 回車鍵確認安裝信息
Install-Package EntityFramwork.zh-Hans -Version 6.1.3
Install-Package MySql.Data -Version 6.9.8
Install-Package MySql.Data.Entity -Version 6.9.8
Install-Package MySql.Web -Version 6.9.8 安裝完畢
四.定義一個上下文類:
使其繼承DbContext
例如:
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))] //未添加的狀況下就會在Add-Migration InitialCreate時候報錯:未爲提供程序「MySql.Data.MySqlClient」 找到任何 MygrationSqlGenerator.請在目標遷移配置類中使用 SetSqlGenerator 方法以註冊其餘SQL生成器
public class DataContext:DbContext
{
//name 新建的鏈接字符串名稱和Context類名不一樣時候,要在上下文的構造函數中指定鏈接字符串的名稱
public DataContext():base("name="Test") {
Database.SetInitializer<DataContext>(null) //不初始化
}
//本身添加的model,放到數據庫中去的
public DbSet<User> User{get;set}
}
五.利用EFCodeFirst的數據遷移,在補改變以前數據庫結構已經存在的測試數據狀況下添加,進行對數據庫的操做
Enable-Migrations -EnableAutomaticMigrations:使用EF CodeFirst 下的數據遷移
Add-Migration InitialCreate 建立初始化遷移
Updata-Database -Verbose 修改數據庫,將添加的表放到數據庫
添加表:
Add-Migration Add表名 例如:Add-Migration AddCompany
Update-Database -Verbose
添加字段
Add-Migration 字段名 例如:Add-Migration Name
Update-Database -Verbose
刪除字段
Add-Migration Modify表名 例如:Add-Migration ModifyCompany
Update-Database -Verbose
記得注意事項:
1.類型「System.Data.Entity.DbContext」 在未被引用的程序集中定義。必須添加對程序集「EntityFramework, Version=6.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089」 ---在本身引用EF上下文的程序中(web中)安裝EF相關
2.即便引用上下文所在的程序集,以及在web項目中 PlatformDbContext db=new PlatformDbContext(), 在web的web.config中沒有配置鏈接字符串,也是會報「未將對象實例化」---因此記得在本身的頁面所在web,或者控制檯引用程序中配置鏈接數據庫字符串。