4

EF コード ファーストで 1 対多の関係を設定する場合、次のように削除時にカスケードするかどうかを選択できます。

modelBuilder.Entity<Assessment>()
    .HasRequired(asmt => asmt.CreatedByUser)
    .WithMany(usr => usr.Assessments)
    .HasForeignKey(asmt => asmt.CreatedByUserId)
    .WillCascadeOnDelete(true);

ON DELETE CASCADEこれは、外部キー定義の SQL 部分に変換されます。

ALTER TABLE [dbo].[Assessment]  WITH CHECK ADD  CONSTRAINT [FK_dbo.Assessment_dbo.User_CreatedById] FOREIGN KEY([CreatedById])
REFERENCES [dbo].[User] ([UserId])
ON DELETE CASCADE
GO

ただし、Fluent API には、 の値を制御できる同様のメソッドはないようですON UPDATE CASCADE。のようなもの.WillCascadeOnUpdate()。なぜだめですか?

4

3 に答える 3

2

まあ、明らかにこれに対する答えは、DBMSが主キーの変更をサポートしているとしても、ORMの主キーを決して変更してはならないということです。主キーは決して変更されないことが前提であるため、更新時にカスケードするかどうかを指定できるエンティティフレームワークは必要ありません。これは、主キーの更新が行われないという考え方だからです。

ただし、これは、エンティティフレームワークORMで許可されていない場合でも、ほとんどのデータベースで手動で実行できることに注意してください。データベースで直接主キーの更新を行う場合、DBMSはカスケード更新にデフォルトの動作を使用します。

于 2012-12-08T18:32:06.913 に答える
2

エンティティ フレームワークは、ナビゲーション プロパティを介して関係を処理するため、そのON UPDATE CASCADEようなすべての関係に対して既にオンになっています。

うーん、一方で、Entity Frameworkからエンティティの主キーを直接変更できるかどうかはわかりません。

于 2012-12-04T15:38:28.680 に答える
1

主キーは変更できません。

これは一般的に悪い習慣ですが、特に ORM を使用する場合はそうです。

于 2012-12-04T23:47:59.380 に答える