1.添加並加入
在project.json中添加
"tools": { "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final" }, "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.0" }, "Pomelo.EntityFrameworkCore.MySql": "1.0.1", "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final" },
在 tools中加入
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
在dependencies中加入
"Pomelo.EntityFrameworkCore.MySql": "1.0.1", "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
在Startup.cs中加入
public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddApplicationInsightsTelemetry(Configuration); services.AddDbContext<這裡填寫你的DbContext>(options => options.UseMySql(Configuration.GetConnectionString("DefaultConnectionString"))); services.AddMvc(); }
下面這個地方可以直接填寫你的數據庫連接字符串。//比如 "Server=localhost;database=MySqlDemo;uid=root;pwd=123456;"
services.AddDbContext<這裡填寫你的DbContext>(options => options.UseMySql(Configuration.GetConnectionString("DefaultConnectionString")));
這裡的Configuration讀取的是appsettings.json 。
所以你要在appsetting.json 添加一個
"ConnectionStrings": { "DefaultConnectionString": "Server=localhost;database=MySqlDemo;uid=Quan;pwd=123456;" },
然後他就可以讀到這個字符串了。
當然你的DbContext一定要有構造方法。
public class MySqlDemoContext : DbContext { public MySqlDemoContext(DbContextOptions<MySqlDemoContext> options): base(options) { }
}
這樣你的mysql數據庫就能練得上了,可以當然但是這樣連接上去並存入數據有可能會報錯,因為efcore,並不會主動地創建數據庫
public class MySqlDemoInitializer { public static void Seed(IApplicationBuilder app) { // Get an instance of the DbContext from the DI container using (var context = app.ApplicationServices.GetRequiredService<MySqlDemoContext>()) { //如果數據庫不存在就會去創建 context.Database.EnsureCreated(); //這裡半段有無數據在在表裡,如果有不初始化數據,如果沒有就初始化 if (context.Set<Account>().Any() == false) { SetBasicData(context); SetTestAdmin(context); #if DEBUG SetTestNews(context); SetTestCase(context); SetTestPartner(context); SetTestCompany(context); SetTestPosition(context); SetTestProblem(context); SetTestRefund(context); #endif } } }
這裡就是一個初始化的方法,在startup.cs中運行該方法 這個方式初始化有一個不靈活的地方,當程序運行之後只會執行一次。並不會像ef6那樣,運行之後也會判斷數據庫,不存在也會去創建。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { //將該方法放於最後執行 MySqlDemoInitializer.Seed(app); }
還有一點,取數據的時候,取出來的Model是不會帶有外鍵
這裡就要用貪心加載 這樣他就能取出Model所關聯的外鍵
db.Set<Account>() .Include(m => m.Role) .Include(m => m.AccountInfo) .Include(m => m.AccountModules);
還有如何在Controller中使用
public class AccountController : Controller { private AccountService _accountServ; public AccountController(MySqlDemoContext _db) { _accountServ = new AccountService(_db); } }
通過依賴注入,程序會自動將MySqlDemoContext new出來,並注入進來