程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 4.添加對efcore的支持 ,並使用mysql數據庫。,efcoremysql

4.添加對efcore的支持 ,並使用mysql數據庫。,efcoremysql

編輯:關於.NET

4.添加對efcore的支持 ,並使用mysql數據庫。,efcoremysql


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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved