私は、このエラーは
サイクルまたは複数のカスケードパスを引き起こす可能性が「領域」テーブルの上に 「FK_dbo.Regions_dbo.Countries_CountryId」FOREIGN KEY制約の紹介を取得しています。 ON DELETE NO ACTIONまたはON UPDATE NO ACTIONを指定するか、他のFOREIGN KEY制約を変更してください。 制約を作成できませんでした。以前のエラーを参照してください。
これは私のデータベース設計が悪いのですか?私はカスケードなどをオフにすることをお読みになりましたが、ラグから問題が掃除されているかどうかはわかりません。
私は、EFが自分のドメインクラスを使ってテーブルを生成するようにしています(私は、この時点でデータアノテーションや流暢なマッピングを使用していません)。
public class Country
{
public Country()
{
this.Stores = new List<Store>();
this.Regions = new List<Region>();
Id = GuidCombGenerator.GenerateComb();
}
public Guid Id { get; private set; }
private string name;
public string Name
{
get { return name; }
set
{
name = value.Trim();
}
}
private string code;
public string Code
{
get { return code; }
set
{
code = value.Trim();
}
}
public virtual ICollection<Store> Stores { get; set; }
public virtual ICollection<Region> Regions { get; set; }
}
public class City
{
public City()
{
this.Stores = new List<Store>();
Id = GuidCombGenerator.GenerateComb();
}
public Guid Id { get; private set; }
private string name;
public string Name
{
get { return name; }
set
{
name = value.Trim();
}
}
public Guid RegionId { get; set; }
public virtual Region Region { get; set; }
public virtual ICollection<Store> Stores { get; set; }
}
public class Region
{
public Region()
{
this.Cities = new List<City>();
this.Stores = new List<Store>();
Id = GuidCombGenerator.GenerateComb();
}
public Guid Id { get; private set; }
private string state;
public string State
{
get { return state; }
set
{
state = value.Trim();
}
}
public Guid CountryId { get; set; }
public virtual ICollection<City> Cities { get; set; }
public virtual Country Country { get; set; }
public virtual ICollection<Store> Stores { get; set; }
}
public class Store
{
public Store()
{
Id = GuidCombGenerator.GenerateComb();
Users = new List<User>();
}
public Guid Id { get; private set; }
public Guid CountryId { get; set; }
public Guid CityId { get; set; }
public Guid RegionId { get; set; }
public virtual City City { get; set; }
public virtual Country Country { get; set; }
public virtual Region Region { get; set; }
public virtual ICollection<User> Users { get; set; }
}
店舗が原因である可能性がありますか?
はあなたが私たちに関係するテーブルを表示することができ、どのような彼らの構造が最も重要である、と:どのようにそれらの間にFK制約が設定されていますか?そこで、地域と国の間にカスケード削除を設定したいので、国が削除された場合、その地域はすべて削除されますか?合理的に聞こえる - 問題は、なぜこれがサイクルを引き起こすのだろうか?カスケード削除の他のFK制約には、すでに存在しているものはありますか? –
私はこれらの領域を表示するように更新しました。コードを最初に作成しているので、まだテーブルが生成されていません。 – chobo2
残念ながら、あなたは私たちに 'Store'クラスを見せていません....そしてカスケード削除を定義するコードは見当たりません... –