20.1翻譯系列:EF 6中自動數據遷移技術【EF 6 Code-First系列】

来源:https://www.cnblogs.com/caofangsheng/archive/2019/04/14/10705233.html
-Advertisement-
Play Games

原文鏈接:https://www.entityframeworktutorial.net/code-first/automated-migration-in-code-first.aspx EF 6 Code-First系列文章目錄: 1 翻譯系列:什麼是Code First(EF 6 Code F ...


原文鏈接:https://www.entityframeworktutorial.net/code-first/automated-migration-in-code-first.aspx

 

EF 6 Code-First系列文章目錄:

 

 

Entity Framework介紹了自動遷移技術,所以每次實體發生改變的時候,你不用手動去處理資料庫遷移。

自動遷移技術可以通過在程式包管理控制臺中輸入並執行:enable-migrations命令做到。打開程式包管理控制台,輸入:enable-migrations –EnableAutomaticMigration:$true【確保預設的項目是你現在要執行的項目】

當命令執行成功之後,將會創建一個internal sealed Configuration 類,這個Configuration類繼承自DbMigrationConfiguration :

正如你在COnfiguration類的構造函數中看到的那樣,AutomaticMigrationsEnabled 被設置為true.

下一步,就是在上下文類中設置資料庫初始化策略為MigrateDatabaseToLatestVersion:

public class SchoolContext: DbContext 
{
    public SchoolDBContext(): base("SchoolDB") 
    {
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<SchoolDBContext, EF6Console.Migrations.Configuration>());
    }

    public DbSet<Student> Students { get; set; }
        
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    }
}

現在你就完成了自動化遷移技術的配置。當實體發生改變的時候,EF將會自動進行資料庫遷移。目前為止,我們只有一個Student實體,還有一個上下文類,我們運行項目看看生成的資料庫:

你將會發現EF API創建了__MigrationHistory 表和Students表。__MigrationHistory 包含了每次資料庫遷移的歷史記錄。

現在,你添加一個新的領域類實體,運行程式,會發現資料庫自動包含了所有實體所映射的表。你不用運行任何其他命令。

然而,這樣只是針對添加實體或者移除實體才有用,當你向實體中添加、修改或者刪除屬性的時候,並不起作用。刪除領域類的任何一個屬性,運行項目:

這樣是因為你將會丟失相應列的數據。為瞭解決這個,你需要在Configuration類的構造函數中,設置AutomaticMigrationDataLossAllowed 為true,並且設置AutomaticMigrationsEnabled = true。

為了瞭解更多enable-migrations命令的參數,可以執行get-help enable-migrations 或者get-help enable-migrations -detailed,你將會看到:

PM> get-help enable-migrations

NAME
    Enable-Migrations
    
SYNOPSIS
    Enables Code First Migrations in a project.
    
    
SYNTAX
    Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] 
    [-MigrationsDirectory <String>] [-ProjectName <String>] [-StartUpProjectName 
    <String>] [-ContextProjectName <String>] [-ConnectionStringName <String>] 
    [-Force] [-ContextAssemblyName <String>] [-AppDomainBaseDirectory <String>] 
    [<CommonParameters>]
    
    Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] 
    [-MigrationsDirectory <String>] [-ProjectName <String>] [-StartUpProjectName 
    <String>] [-ContextProjectName <String>] -ConnectionString <String> 
    -ConnectionProviderName <String> [-Force] [-ContextAssemblyName <String>] 
    [-AppDomainBaseDirectory <String>] [<CommonParameters>]
    
    
DESCRIPTION
    Enables Migrations by scaffolding a migrations configuration class in the project. If the
    target database was created by an initializer, an initial migration will be created (unless
    automatic migrations are enabled via the EnableAutomaticMigrations parameter).
    

RELATED LINKS

REMARKS
    To see the examples, type: "get-help Enable-Migrations -examples".
    For more information, type: "get-help Enable-Migrations -detailed".
    For technical information, type: "get-help Enable-Migrations -full".

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Map集合 在Map集合中保存的數據為一組數據,其中:一個數據為key,另外一個數據為value。而key和value具備對應的關係,在集合中它們屬於一組(一對)數據。而每個key只能對應唯一的一個value值並且所有的key不能重覆。 但是其中的value值是可以重覆的。 Collection中的 ...
  • 6、Update By Query API 介面可以在不改變 source 的情況下對 index 中的每個文檔進行更新。這對於獲取新屬性或其他聯機映射更改很有用。以下是 API: 這將返回如下內容: _update_by_query 在開始執行的時候獲得一個快照,並使用內部版本控制對找到的內容進行 ...
  • 描述 當我們安裝完 DotNetCore 3.0 版本的 SDK 後,我們就可以創建基於 DotNetCore 的 WPF 項目模板,通過如下 CLI 可以方便快捷的創建並運行我們的項目: 做過 WPF 開發的朋友都知道,這個項目模板肯定不符合我們的預期,我們希望我們的項目模板能夠加入 MVVM 的 ...
  • 在一些場合中,需要使用組合式下拉列表控制項,比如帶treeivew的combobox,但是代碼較多,使用不便。為此,本人製作了一個超級易用的DS開放式下拉列表。 以下演示使用過程。 註意,為安全起見(主要是VS窗體設計器不相容),使得“內置控制項”屬性不可以在設計時賦值,需要在運行時賦值。 此處為了方便 ...
  • 什麼是委托委托是沒有方法體的,聲明委托就是一個關鍵字: delegate ,委托可以試有參無參,有返回值無返回值。和我們的方法是一樣的。不同的區別是 委托沒有方法體的,委托可放在類下也可以放在類的外面和類同等級。委托可以說是一個類型。 委托的聲明: 委托的實例化: 我們可以把委托看作一個幫工每個幫工 ...
  • 這個教程主要是對於第一次使用dotnet core開發的同學。 運行環境是在centos 7 , 使用了docker容器。 即這是一篇運行在linux的docker容器上的微服務的簡單應用。 一. 安裝.NET SDK 安裝.NET之前,先安裝一些依賴,運行下麵的命令 安裝成功後,再安裝.NET S ...
  • 本篇文章以 ADO.NET 訪問SQL SERVER 資料庫為例, 其中需用System.Data.SqlClient; 資料庫連接字元串寫法為:server=數據源(伺服器名稱);uid=用戶名;pwd=密碼;database=資料庫名稱 ...
  • 原文鏈接:https://www.entityframeworktutorial.net/code-first/entity-framework-power-tools.aspx 大家好,這裡就是EF 6 Code-First 系列的最後一篇文章了。沒有辜負大家的期望,都更新完了,2015年很早的時 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...