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出來,並注入進來