1

私はこれらのクラスを持っています:

public class SystemRequirements : DbEntity
{
   public string OS {get;set;}
}

public class Application : DbEntity
{
   public string Name {get;set;}

   public virtual SystemRequirements MinimumSystemRequirements {get;set;}
   public Guid MinimumSystemRequirementsId {get;set;}

   public virtual SystemRequirements RecommendedSystemRequirements {get;set;}
   public Guid RecommendedSystemRequirementsId {get;set;}
}

「Foreign Key Constraint を導入すると、サイクルまたは複数のカスケード パスが発生する可能性があります」というエラーが表示されました。

DbEntity主キーを含む抽象クラスです。[Key] public Guid Id {get;set;}

だから、私は次のように変更Applicationしました:

public class Application : DbEntity
{
   public string Name {get;set;}

   public virtual SystemRequirements MinimumSystemRequirements {get;set;}
   [ForeignKey("MinimumSystemRequirements")]
   public Guid MinimumSystemRequirementsId {get;set;}

   public virtual SystemRequirements RecommendedSystemRequirements {get;set;}
   [ForeignKey("RecommendedSystemRequirements")]
   public Guid RecommendedSystemRequirementsId {get;set;}
}

だから私の質問は、なぜこれがうまくいかないのですか? Applicationinへの参照を入れてみましたSystemRequirementsが、うまくいきませんでしたか?

スペルミスのためにこの投稿をトロールしないでください. 私のコードはVSで問題ありません。入力するのではなく、コピーして貼り付けます。

4

3 に答える 3

0

おいおい朗報。お題解りました!

昔 (数か月前) に、Code First でのCascade On Delete使用を有効にするには、次のようにする必要があると言われたことを覚えています。Attributes

public Guid CascadeOnId {get;set;}
public virtual Cascade CascadeOn {get;set;}

ただし、これを常に使用していることを知る前に:

public virtual Cascade CascadeOff {get;set;}

私が循環的な削除を取得している理由は、最初の例では HDD が存在する場合は削除されますが、HDD はその 2 番目のインスタンスに対して常に存在する必要があるためです。例:

public Guid FirstCascadeId {get;set;}
public virtual Cascade FirstCascade {get;set;}

public Guid SecondCascadeId {get;set;}
public virtual Cascade SecondCascade {get;set;}

そのため、エンティティ フレームワークは、カスケード エンティティを削除する場合、関連する親を削除する必要があることを心配しています。親を削除する場合は、関連するすべてのカスケードを削除する必要があります。そこからサイクルが始まります。なんらかの意味を成していることを願っています。

オフにするには、その仮想に関連する Id をCascade On Delete指定してはなりません。Guidしたがって、上記を機能させるには、次を使用します。

public virtual Cascade FirstCascade {get;set;}
public virtual Cascade SecondCascade {get;set;}

必要に応じて最初のものをオンにすることができますがCascade On Delete、そのうちの1つがそれを取得しておらず、正常に動作することを確認してください:)

Model First を使用して答えを見つけ、頭上に巨大な白熱電球を配置しました :P

于 2013-05-15T08:55:24.430 に答える