8.インクリメント主キー挿入指定されたプライマリデータキー

あなたは、テーブルの作成者があると、主キーはAuthorIdです

著者の作者= 新しい著者()
{ 
    AuthorId = 1001 
    名前 = " ジョニー" 
    ブック = 新しいリスト<ブック> 
    { 
        新しいブック(){タイトル= " VB.NET学ぶ" }、
         新しいブック(){タイトル= " C#の絶対初心者のための基礎" } 
    } 
}。

あなたがマップを保存したいのですが、あなたは主キーの値を指定するとできない直接のSaveChanges、あなたが最初に、IDENTITY_INSERTを開いて保存し、削除する必要があります1001、です

使用してVARのコンテキスト= 新しい書店())
{ 
    著者の作者 = 新しい著者()
    { 
        AuthorId = 1001 
        名前 = " ジョニー" 
        ブック = 新しいリスト<ブック> 
        { 
            新しいブック(){タイトル= " VB.NET学びます" }、
             新しいブック(){タイトル= " 絶対初心者のためのC#の基礎" }、
        }  
    }。
    context.Authors.Add(著者)
    
    (context.Database.ExecuteSqlCommand "@ 。SET IDENTITY_INSERT [DBO] [著者] ON " )。
    context.SaveChanges(); 
    context.Database.ExecuteSqlCommand(@ " SET IDENTITY_INSERT [DBO] [著者] OFF。" ); 
}

しかし、その後、保存されたデータIDが1001ではありませんが、識別番号のデータベースを生成します。

ソリューションは、DataContextの書き換えをサブクラス化することであるOnModelCreating

パブリック クラスTempBookStore:書店
{ 
    保護 オーバーライド ボイドOnModelCreating(DbModelBuilder ModelBuilderの)
    { 
        modelBuilder.Entity <著者> ()
          .Property( => a.AuthorId)
          .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)。
        ベース.OnModelCreating(ModelBuilderの)。
    } 
}

トランザクション内のその後savechangs

使用してVARのコンテキスト= 新しいTempBookStore())
{ 
    使用してVARのトランザクション= context.Database.BeginTransaction())
    { 
        著者の作者 = 新しい著者()
        { 
            AuthorId = 1001 
            名前 = " ジョニー" 
            ブック = 新しいリスト<ブック> 
            { 
                新しいブック(){タイトル= " 学びVB.NET " }、
                 新しいですブック(){タイトル= " 絶対初心者のためのC#の基礎" } 
            } 
        }。
        context.Authors.Add(著者); 

        (context.Database.ExecuteSqlCommand "@ 。SET IDENTITY_INSERT [DBO] [著者] ON " )。
        context.SaveChanges(); 
        context.Database.ExecuteSqlCommand(@ " SET IDENTITY_INSERT [DBO] [著者] OFF。" ); 
            
        transaction.Commit(); 
    } 
}

 

おすすめ

転載: www.cnblogs.com/nocanstillbb/p/11494987.html