7

外部キーと 1 対 1 の関係がありますが、Cascade Delete何らかの理由で有効になっていません。サンプルコードは以下です。

public class AppRegistration
{
    public int AppRegistrationId { get; set; }
    [Required]
    [StringLength(50)]
    [Display(Name = "Username")]
    public string UserName { get; set; }
    [Required]
    [StringLength(100)]
    public string Password { get; set; }
    [StringLength(20)]
    public string StudentOrAgent { get; set; }
    // navigation properties
    public virtual AppStatus AppStatus { get; set; }
    public virtual Agreement Agreement { get; set; }
    public virtual AnotherTable AnotherTable { get; set; }
}

外部キーを持つ従属テーブルは次のとおりです。

public class Agreement
{
    [Key]
    [ForeignKey("AppRegistration")]
    public int AppRegistrationId { get; set; }
    public DateTime DateAgreed { get; set; }
    public virtual AppRegistration AppRegistration { get; set; }
}

生成されたテーブルからエントリを削除しようとするとAppRegistrations、参照制約の競合が発生します。

依存テーブルにナビゲーション プロパティを配置しようと[Required]しましたが、何もしません。Update-DatabaseコマンドはNo pending code-based migrations.メッセージを表示します。何か案は?ありがとう。

更新: 次のエラー メッセージが表示されます。

The DELETE statement conflicted with the REFERENCE constraint "FK_dbo.AppStatus_dbo.AppRegistrations_AppRegistrationId". The conflict occurred in database "MVCapp", table "dbo.AppStatus", column 'AppRegistrationId'.

4

2 に答える 2

7

カスケード削除を取得できない理由は、関係がオプションであるためです。

必要な関係が必要な場合、つまり、使用できる関係AppRegistrationが必要なAgreement場合 (カスケード削除が自動的に構成されます):

public class Agreement
{
    ...
    [Required]
    public AppRegistration AppRegistration{ get; set; }
}

カスケード削除でリレーションシップをオプションにしたい場合は、Fluent API を使用してこれを構成できます。

modelBuilder.Entity<AppRegistration>()
    .HasOptional(a => a.Agreement)
    .WithOptionalDependent()
    .WillCascadeOnDelete(true);
于 2013-05-10T16:20:48.017 に答える