EF Core 2.2 對多個 DbContext 多個數據庫的狀況進行遷移的示例

場景

在一個項目中,使用了多個 DbContext 且每一個 DbContext 對應一個數據庫的狀況數據庫

建立新項目

  • 打開 Visual Studio 2017
  • 「文件」>「新建」>「項目」
  • 從左菜單中選擇「已安裝」>「Visual C#」>「.NET Core」。
  • 選擇「ASP.NET Core Web 應用程序」。
  • 輸入「WebApplication」做爲名稱,而後單擊「肯定」。
  • 在「新建 ASP.NET Core Web 應用程序」對話框中:
  • 確保在下拉列表中選擇「.NET Core」和「ASP.NET Core 2.1」
  • 選擇「Web 應用程序(模型視圖控制器)」項目模板
  • 確保將「身份驗證」設置爲「無身份驗證」
  • 單擊「肯定」c#

建立第一個模型

  • 右鍵單擊「Models」文件夾,而後選擇「添加」>「類」。
  • 輸入「FirstModel.cs」做爲名稱,而後單擊「肯定」。
  • 將此文件的內容替換爲如下代碼:cookie

    using System.Collections.Generic;
    using Microsoft.EntityFrameworkCore;
    
    namespace WebApplication.Models
    {
        public class FirstDbContext : DbContext
        {
            public FirstDbContext(DbContextOptions<FirstDbContext> options)
                : base(options)
            { }
    
            public DbSet<Blog> Blogs { get; set; }
            public DbSet<Post> Posts { get; set; }
        }
    
        public class Blog
        {
            public int BlogId { get; set; }
            public string Url { get; set; }
    
            public ICollection<Post> Posts { get; set; }
        }
    
        public class Post
        {
            public int PostId { get; set; }
            public string Title { get; set; }
            public string Content { get; set; }
    
            public int BlogId { get; set; }
            public Blog Blog { get; set; }
        }
    }

    生產應用一般會將每一個類放在單獨的文件中。 爲簡單起見,本教程將這些類放在一個文件中。函數

建立第二個模型

  • 右鍵單擊「Models」文件夾,而後選擇「添加」>「類」。
  • 輸入「SecondModel.cs」做爲名稱,而後單擊「肯定」。
  • 將此文件的內容替換爲如下代碼:工具

    using Microsoft.EntityFrameworkCore;
    
    namespace WebApplication.Models
    {
        public class SecondDbContext : DbContext
        {
            public SecondDbContext(DbContextOptions<SecondDbContext> options)
                : base(options)
            { }
    
            public DbSet<Student> Students { get; set; }
        }
    
        public class Student
        {
            public int Id { get; set; }
            public string Name { get; set; }
        }
    }

    生產應用一般會將每一個類放在單獨的文件中。 爲簡單起見,本教程將這些類放在一個文件中。spa

  • 至此,項目的目錄結構以下:code

使用依賴注入註冊上下文

若要使 FirstDbContextSecondDbContext 可用於 MVC 控制器,請在 Startup.cs 中將其註冊爲服務。blog

在應用程序啓動過程當中,經過依賴關係注入 註冊服務(如 FirstDbContext),以便可以經過構造函數的參數和屬性向使用服務的組件(如 MVC 控制器)自動提供該服務。教程

  • 在 Startup.cs 中,添加如下 using 語句:

    using WebApplication.Models;
    using Microsoft.EntityFrameworkCore;
  • 將如下 手動高亮 的代碼添加到 ConfigureServices 方法:

    public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
    
    
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    
            var connection = @"Server=你的數據庫地址;Database=FirstDbContext;User Id=你的數據庫帳號;Password=你的數據庫密碼;"; // 手動高亮
            services.AddDbContext<FirstDbContext> // 手動高亮
                (options => options.UseSqlServer(connection)); // 手動高亮
    
            var secondDbconnection = @"Server=你的數據庫地址;Database=SecondDbContext;User Id=你的數據庫帳號;Password=你的數據庫密碼;"; // 手動高亮
            services.AddDbContext<SecondDbContext> // 手動高亮
                (options => options.UseSqlServer(secondDbconnection)); // 手動高亮
        }

    生產應用一般會將鏈接字符串放在配置文件或環境變量中。 爲簡單起見,本教程在代碼中定義它。

建立數據庫

如下步驟使用遷移建立數據庫。

  • 「工具」>「NuGet 包管理器」>「包管理器控制檯」
  • 運行如下命令建立 FirstDbContext 的遷移:

    Add-Migration InitialCreate -Context FirstDbContext -OutputDir Migrations\FirstDbContextMigrations
    Update-Database -Context FirstDbContext

    -Context 參數表示要使用的 DbContext 類,請參閱 這裏瞭解詳細信息。

  • 「工具」>「NuGet 包管理器」>「包管理器控制檯」
  • 運行如下命令建立 SecondDbContext 的遷移:

    Add-Migration InitialCreate -Context SecondDbContext -OutputDir Migrations\SecondDbContextMigrations
    Update-Database -Context SecondDbContext
  • 至此,項目的目錄結構以下:

  • 數據庫以下:

相關文章
相關標籤/搜索