こんにちは、私はデータベーステーブルを生成しようとすると、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
。