ケース内のエンティティフレームワークは、どのように他のテーブルに影響を与えずに、誤ってテーブルを削除したバック回復します

 EntityFramework原則としてデータ移行について

その後、テーブル作成クエリデータベース「__MigrationHistory」、コードベースの移行フォルダ内のすべてのファイル、ファイルが内部__MigrationHistoryテーブルでない場合は、マイグレーションを実行します。

その後上記の原理によって、我々は、手動でテーブルを削除しないように注意している場合を見て、どのようにあなたが削除した回復テーブル下に他に影響を与えることなく、テーブル:

 

この方法の一つ:

次のようにモデルとDBContextについて:

   パブリッククラスブログ
    { 
        公共のint型のblogid {取得します。セットする; } 
        パブリック文字列名{得ます。セットする; } 

        パブリック文字列のURL {得ます。セットする; } 
        パブリック仮想一覧<お知らせ>記事{取得します。セットする; } 
    } 

    publicクラスユーザー
    { 
        [キー] 
        パブリックint型のユーザーID {取得します。セットする; } 
        パブリック文字列のユーザー名{取得します。セットする; } 
        パブリック文字列のDisplayName {得ます。セットする; } 
        //公共int型?年齢{取得します。セットする; } 
        //公共の文字列の関心{取得します。セットする; } 
    } 

    publicクラスの学校
    { 
        公共のint SchoolId {取得します。セットする; } 

        パブリック文字列SchoolName {得ます。セットする; }

        公共int型SchoolLevel {取得します。セットする; } 
    } 


    publicクラス教師
    { 
        [キー] 
        パブリックINT TecherId {得ます。セットする; } 
        パブリック文字列TeacherName {得ます。セットする; } 
    } 


    publicクラスのポスト
    { 
        公共のint PostId {取得します。セットする; } 
        パブリック文字列のタイトル{取得します。セットする; } 
        パブリック文字列の内容{取得します。セットする; } 

        公共のintのblogid {得ます。セットする; } 
        パブリック仮想ブログブログ{取得します。セットする; } 
    } 

    publicクラスのチュートリアル
    { 
        [キー] 
        公共のint Idを{取得します。セットする; } 

        公共のint型の名前{取得します。セットする; } 
    }

    パブリッククラスBloggingContext:DbContext 
    { 
        公共DbSet <ブログ>ブログ{取得します。セットする; } 
        公共DbSet <ポスト>記事{取得します。セットする; } 

        公共DbSet <ユーザー>ユーザー{取得します。セットする; } 

        公共DbSet <チュートリアル>チュートリアル{取得します。セットする; } 
        公共DbSet <学校>学校{取得します。セットする; } 

        公共DbSet <先生>教師{得ます。セットする; } 
        保護オーバーライドボイドOnModelCreating(DbModelBuilder ModelBuilderの)
        { 
            modelBuilder.Entity <ユーザー>()プロパティ(U => u.DisplayName).HasColumnName( "DISPLAY_NAME")。
            modelBuilder.Entity <ユーザ>()プロパティ(U => u.Username).HasColumnName( "USER_NAME")。

  

次のように移行フォルダをファイル:

対応するデータベースレコードです。

この時点で、学校は、我々は手動でテーブルを削除した場合、我々は学校がテーブルの移行コードを作成および変更するために見つける必要があります移行はフォルダ内のファイル次のドキュメントのこれは、対応するファイルを検索します

私たちは、中201503190341085_addmodels.csにここにあります

   公共の部分クラスのaddmodels:DbMigration 
     { 
         公共オーバーライドボイドアップ()
         { 
             のCreateTable(
                 "dbo.Blogs"、
                 C =>新しい
                     { 
                         のblogid = c.Int(NULL可能:偽、アイデンティティ:真)、
                         名前= c.String()、
                         URL = c.String()
                     })
                 .PrimaryKey(T => t.BlogId)。
 
             CreateTable(
                 "dbo.Posts"、
                 C =>新しい
                     { 
                         PostId = c.Int(NULL可能:偽、アイデンティティ:真)、
                         タイトル= c.String()、 
                     })
                         コンテンツ= c.String()、
                         のblogid = c.Int(NULL可能:偽)、
                     })
                 .PrimaryKey(トン=> t.PostId)
                 .ForeignKey( "dbo.Blogs"、T => t.BlogId、cascadeDelete:真)
                 .INDEX(T => t.BlogId)。
             
             CreateTable(
                 "dbo.Schools"、
                 C =>新しい
                     { 
                         SchoolId = c.Int(NULL可能:偽、アイデンティティ:真)、
                         SchoolName = c.String()、
                         SchoolLevel = c.Int(NULL可能:偽)、
                 .PrimaryKey( T => t.SchoolId)。
 
                 "dbo.Tutorials"、
                 C =>新しい
                     { 
                         ID = c.Int(NULL可能:偽、アイデンティティ:TRUE)、
                         NAME = c.Int(NULL可能:偽)
                     })
                 .PrimaryKey(T => t.Id)。
 
             CreateTable(
                 "dbo.Users"、
                 C =>新しい
                     { 
                         ユーザーID = c.Int(NULL可能:偽、アイデンティティ:TRUE)、
                         USER_NAME = c.String()、
                         DISPLAY_NAME = c.String()
                     }) 
                 .PrimaryKey(T => t.UserId); 
             
         } 
         
         公共オーバーライドボイドダウン()
         { 
             DropForeignKey(」 dbo.Posts " "のblogid"、"
             DropIndex( "dbo.Posts"、新たな[] { "のblogid"})。
             DropTable( "dbo.Users"); 
             DropTable( "dbo.Tutorials"); 
             DropTable( "dbo.Schools"); 
             DropTable( "dbo.Posts"); 
             DropTable( "dbo.Blogs"); 
         } 
     }

  

このとき、限り、ファイル名として、私たちがしなければならないレコードを削除するには、移行テーブル内の対応するデータを201503190341085_addmodels.cs、

  データのみのshoolsのテーブルを作成して残し、MigrationId =「201503190341085_addmodels」は、その後、私たちは201503190341085_addmodels.cs内の他の移行データをコメント__MigrationHistoryを削除

    公共の部分クラスのaddmodels:DbMigration 
    { 
        公共オーバーライドボイドアップ()
        { 
            //のCreateTable(
            // "dbo.Blogs"、
            // C =>新しい
            // { 
            //のblogid = c.Int(NULL可能:偽、アイデンティティ:真)、
            //名前= c.String()
            //のURL = c.String()
            //})
            // .PrimaryKey(T => t.BlogId)。

            //のCreateTable(
            // "dbo.Posts"、
            // C =>新しい
            // { 
            // PostId = c.Int(NULL可能:偽、アイデンティティ:真)、
            //タイトル= c.String()、
            //コンテンツ= c.String()、
            //のblogid = c.Int(NULL可能:偽)、
            //})
            // .PrimaryKey(トン=> t.PostId)
            / / .ForeignKey( "dbo.Blogs"、T => t.BlogId、cascadeDelete:真)
            // .INDEX(トン=> t.BlogId); 
            
            CreateTable(
                "dbo.Schools"、
                C =>新しい
                    { 
                        SchoolId = c.Int(NULL可能:偽、アイデンティティ:TRUE)、
                        SchoolName = c.String()、
                        SchoolLevel = c.Int(NULL可能:偽)
                    })
                .PrimaryKey(T => t.SchoolId)。

            //のCreateTable(
            // "dbo.Tutorials"、
            // C =>新しい
            // { 
            // ID = c.Int(NULL可能:偽、アイデンティティ:真)、
            //名前= c.Int(NULL可能:偽) 、
            //})
            // .PrimaryKey(T => t.Id)。

            //のCreateTable(
            // "dbo.Users"、
            // C =>新しい
            // { 
            //ユーザーID = c.Int(NULL可能:偽、アイデンティティ:真)、
            // USER_NAME = c.String()、
            // DISPLAY_NAME = c.String()、
            //})
            // .PrimaryKey(T => t.UserId)。
            
        } 
        
        パブリックオーバーライドボイドダウン()
        { 
            //DropForeignKey("dbo.Posts」、 "のblogid"、 "dbo.Blogs")。
            //DropIndex("dbo.Posts」、新たな[] { "のblogid"})。
            //DropTable("dbo.Users "); 
            //DropTable("dbo.Tutorials "); 
            DropTable( "dbo.Schools"); 
            //DropTable("dbo.Posts "); 
            //DropTable("dbo.Blogs "); 
        } 
    }

  

この時点で、復元学校を完了するために、テーブル内のパッケージマネージャコンソールの更新データベースを実行する場合

 

方法2:

(独自のデータベース名に行くためにあなたを必要としない変数)の更新、データベース-script -SourceMigration $ InitialDatabaseを使用しますか、  

更新-データベース-script -SourceMigrationセカンド-TargetMigrationまず ( 場合によっては、あるどちらも使用の)
(第一、第二は、あなたの移行のフォルダのメタファーのファイル名に付加されますが、アップデート・データベースに入ること201503190906406_addmodels -script -SourceMigration addmodels)
これは、スクリプトファイルの一部が作成されたかの情報を修正するには、あなたのテーブルの回復を見つけ、スクリプトファイルを作成します

私はあなたがデータベースで実行することができ、作成SQLの学校が見つかりました:

TABLE [DBO]を作成します。[学校](
[SchoolId] [INT] NOT NULL IDENTITY、
[SchoolName] [データ型はnvarchar(max)は[SchoolLevel]の[int]は、NOT NULL、
CONSTRAINT [PK_dbo.Schools] PRIMARY KEY([SchoolId ]) 

  


だから、より良い回復

 

おすすめ

転載: www.cnblogs.com/QueryWord/p/11607723.html