あなたは、テーブルの作成者があると、主キーは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(); } }