ASP.NET CORE中使用EF CORE


准備工作

首先,我們打開vs中的NuGet包安裝以下的庫:

Microsoft.EntityFrameworkCore.SqlServer(連接sql server數據庫的包)

Microsoft.EntityFrameworkCore.Tools(命令行所需的庫)

Microsoft.EntityFrameworkCore.Design(vs code命令行所需的庫,但是我用的是vs2019,所以這個不需要安裝)

如果你使用mysql,那么下面的包替換sql servcer包,其他的不變:

Pomelo.EntityFrameworkCore.MySql

或者

MySql.Data.EntityFrameworkCore(官方包)

創建模型

public class Province
{
        
    public int Id { get; set; }

    public string Name { get; set; }

    public int Population { get; set; }

      
}

創建DbContext

using Microsoft.EntityFrameworkCore;

public
class MyContext : DbContext { public MyContext(DbContextOptions<MyContext> options) : base(options)   {

}
public DbSet<Province> Province { get; set; } }

 在appsettings.json文件中寫好連接字符串

 

{
 //連接的字符串
 "ConnectionStrings": {
  "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=EFCOREDATABASE;Integrated Security=True",
  "mysqlDefaultConnection": "Server=localhost;Database=EFCOREDATABASE;uid=root;pwd=123456"
 },
 "Logging": {
  "LogLevel": {
   "Default": "Information",
   "Microsoft": "Warning",
   "Microsoft.Hosting.Lifetime": "Information"
  }
 },
 "AllowedHosts": "*"
}

 

 在Startup.cs文件中的ConfigureServices方法中引用

services.AddDbContext<MyContext>(options =>
 {
   options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));

   //連接MySQL字符串
   //options.UseMySql(Configuration.GetConnectionString("mysqlDefaultConnection"));
 });

 打開命令面板輸入命令生成數據庫

 

 我們輸入get-help entityframework獲取以下命令,但是我們只需要用第一個和最后一個那么就完成了我們數據庫生成了

Add-Migration 添加遷移
Drop-Database 刪除數據庫
 Get-DbContext 獲取DbContext
Remove-Migration 刪除遷移
Scaffold-DbContext 腳手架數據庫上下文
Script-Migration 腳本遷移
 Update-Database 更新數據庫

生成以下的文件后,我們在update-database,那么我們的數據庫就生成成功了。

 

 

看到以下內容那么就OK了。

 

 自動遷移

控制台啟動程序中添加代碼(這里說明下,我把CreateWebHostBuilder()方法刪了,代碼全部放在Main()中了):

 public class Program
    {
        public static void Main(string[] args)
        {

            IHostBuilder hostBuild = Host.CreateDefaultBuilder(args);
            hostBuild.ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
            var host = hostBuild.Build();
            using (var scope = host.Services.CreateScope())
            {
                try
                {
                    var db = scope.ServiceProvider.GetRequiredService<MyContext>();
                    //Migrate()方法使用前需在程序包管理控制台執行Add-migration遷移命令。
                    //之后程序每次啟動,GetPendingMigrations()都會去檢測是否有待遷移內容,有的話,自動應用遷移。
                    if (db.Database.GetPendingMigrations().Any())
                    {
                        db.Database.Migrate(); //執行遷移
                    }
                    //EnsureCreated方法不需要先執行Add-migration遷移命令,如果數據庫不存在,則自動創建並返回true。
                    //如果已經創建了數據庫后,又改動了實體Model和之前的庫存在沖突,要注意刪庫讓它自動重建,否則會報錯。
                    //db.Database.EnsureDeleted();//刪除數據庫
                    //db.Database.EnsureCreated();
                }
                catch (Exception ex)
                {

                    var logger = scope.ServiceProvider.GetRequiredService<ILogger<Program>>();
                    logger.LogError(ex, "Database Migration Error!");
                    throw;
                }
            }

            host.Run();
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM