9

データベース移行スクリプトを作成するために EF 4.3 移行機能を使用しています。Add-Migration コマンドを実行すると、生成されたスクリプトは次のように作成されます。

        CreateTable(
            "dbo.Recipients",
            c => new
                {
                    RecipientID = c.String(nullable: false, maxLength: 128),
                    SurveyRoundID = c.String(nullable: false, maxLength: 128),
                    LastUpdatedAt = c.DateTime(),
                })
            .PrimaryKey(t => t.RecipientID)
            .ForeignKey("dbo.Employees", t => t.EmployeeID, cascadeDelete: true)
            .ForeignKey("dbo.SurveyRounds", t => t.SurveyRoundID, cascadeDelete: true)
            .Index(t => t.EmployeeID)
            .Index(t => t.SurveyRoundID);

私が抱えている問題は、エンティティの受信者が関係のマスターではないにもかかわらず、スキャフォールディングの移行が cascadeDelete を true に選択することです。

今のところ、cascadeDelete パラメータを手動で false に変更していますが、デフォルトで true を選択する理由を知りたいです。

ありがとう、イド。

4

2 に答える 2

9

期待どおりに動作します。これは関係のプリンシパル エンティティではないため、外部キー制約を定義し、この制約にはカスケード削除オプションがあります。カスケード削除を true に設定する (規約を削除するか流暢なマッピングで変更しない限り、最初に EF コードでのデフォルト) とは、Employeeレコードが削除された場合、カスケード削除が削除をトリガーすることを示しますRecipient(同じことが に適用されますSurveyRounds)。

このモデルは、エンティティが複数の関係に依存しているため、カスケード削除には理想的ではありません。エンティティ マッピングでカスケード削除を直接削除する必要があります。

于 2012-08-14T12:03:50.663 に答える