Entity Framework Core 1.0 RTMでカスケード削除をオフにする方法

asp.net-core-mvc c# entity-framework entity-framework-core sql

質問

こんにちは、私はデータベーステーブルを生成しようとすると、Entry Frameworkのコア1.0のRTMとSQLサーバーとMVC 6アプリケーションが、私は "FOREIGN KEY制約を導入するサイクルまたは複数のカスケードパスが発生する可能性があります"エラーがあります。

私のモデルクラスは以下の通りです:

カテゴリモデル:

 public class Category
{
    public Category()
    {
        this.VariableSettings = new List<VariableSetting>();
    }
    public int CategoryId { get; set; }

    public string CategoryName { get; set; }

    public List<VariableSetting> VariableSettings { get; set; }

    public List<Station> Stations { get; set; }
}

ステーションモデル:

 public class Station
{
    public int StationId { get; set; }
    public string StationName { get; set; }

    public double? Longitude { get; set; }
    public double? Latitude { get; set; }

    public List<VariableRecord> VariableRecords { get; set; }

    public int CategoryID { get; set; }
    public Category Category { get; set; }
}

VariableRecordモデル:

 public class VariableRecord
{
    [Key]
    public int VariableRecordId { get; set; }
    public double Value { get; set; }
    public DateTime RecordDate { get; set; }

    public int StationId { get; set; }
    public Station Station { get; set; }

    public int VarSettingId{ get; set; }
    public virtual VariableSetting VariableSetting { get; set; }
}

変数設定モデル:

public class VariableSetting
{
    [Key]
    public int VarSettingId { get; set; }
    public int Sequence { get; set; }
    public double? MinimumValue { get; set; }
    public double? MaximumValue { get; set; }

    public int CategoryId { get; set; }
    public virtual Category Category { get; set; }

    public int VariableId { get; set; }
    public Variable Variable { get; set; }

    public List<VariableRecord> VariableRecords { get; set; }
}

変数モデル:

 public class Variable
{
    public int VariableId { get; set; }

    public string VariableName { get; set; }

    public string Description { get; set; }

    public string Unit { get; set; }

    public List<VariableSetting> VariableSettings { get; set; }
}

したがって、私のコードCategory-> Station-> VariableRecordとCategory-> VariableSetting-> VariableRecordに経路を削除するカスケードもありますので、Fluent APIを使用してコンテキストクラスのCategory-> VariableSetting-> VariableRecordルートを除外しようとしています。以下:

builder.Entity<VariableRecord>()
        .HasOne(pt => pt.VariableSetting)
        .WithMany(p => p.VariableRecords)
        .HasForeignKey(pt => pt.VarSettingId)
        .OnDelete(DeleteBehavior.Cascade);

しかし、私はまだ以下のようになっています:

System.Data.SqlClient.SqlException(0x80131904): 'VariableSetting'テーブルでFOREIGN KEY制約 'FK_VariableSetting_Category_CategoryId'を導入すると、サイクルまたは複数のカスケードパスが発生する可能性があります。アクションの削除またはアクションの更新を指定したり、他のFOREIGN KEY制約を変更します。

私は数日間これらのコードに立ち往生しているが、まだどこにも行きませんでした、助けてください!

人気のある回答

DeleteBehavior.Restrict代わりにDeleteBehavior.Cascade使用します。

既に複数のカスケードパスがあるので、それらのカスケードを無効にしたい場合は、 DeleteBehavior.Restrict使用しDeleteBehavior.Restrict



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ