私はEFを理解し、信頼しようとしています。 私はテーブルを持つデータベースを持っており、基本を実践するための練習としてEF
Code-First
技術を使ってほとんどの構造を複製しようとしています。複数のDataAnnotation ForeignKeysサイクルまたは複数のカスケードパス例外
すべてのクラスには、名前に「Hb」という接頭辞が付きます。 プロパティ名に 'Hb'を付けずにオブジェクト参照を他のクラスに書きたいと思います。引き起こす可能性が
がテーブルの上にFOREIGN KEY制約 'FK_Common.HbZipcode_Common.HbCountry_CountryId' を紹介 'HbZipcode' :
私はこのsite
のフォロー命令などの最初の実装の原因の例外ですサイクルまたは複数のカスケード・パス。 ON DELETE NO ACTIONまたはON UPDATE NO ACTIONを指定するか、または他のFOREIGN KEY の制約を変更してください。制約またはインデックスを作成できませんでした。前の エラーを参照してください。
[Required, ForeignKey("Country")]
public int CountryId { get; set; }
public virtual HbCountry Country { get; set; }
[Required, ForeignKey("State")]
public int StateId { get; set; }
public virtual HbState State { get; set; }
[Required, ForeignKey("City")]
public int CityId { get; set; }
public virtual HbCity City { get; set; }
// This Foreignkey never throw exception
[ForeignKey("Neighborhood")]
public int? NeighborhoodId { get; set; }
public virtual HbNeighborhood Neighborhood { get; set; }
私が何か間違ったことをやっていると私は見ることができません。
誰かが私を助けることができればそれはいいと思います。
編集:
予想通り plushpuffin から渡された溶液を塗布した後、すべてが行ってきました。
ここでは、コードです:HbZipcode
上
var modelConfig = dbModelBuilder.Entity<HbZipcode>();
modelConfig
.HasRequired(zc => zc.Country)
.WithMany(c => c.Zipcodes)
.HasForeignKey(zc => zc.CountryId)
.WillCascadeOnDelete(false);
modelConfig
.HasRequired(zc => zc.State)
.WithMany(s => s.Zipcodes)
.HasForeignKey(zc => zc.StateId)
.WillCascadeOnDelete(false);
modelConfig
.HasOptional(zc => zc.Neighborhood)
.WithMany(n => n.Zipcodes)
.HasForeignKey(zc => zc.NeighborhoodId)
.WillCascadeOnDelete(false);
Delete cascade
今HbCity
が削除された場合にのみ、ここで何が起こっている
が、私は削除の方向を虚偽表示:
それはあなたがこのような何かをしたいと考えます。削除されたHbNeighborhood(など)がHbZipCodeにカスケードされます。申し訳ありません。 – plushpuffin
だから、すべての "CASCADE"制約と明示的な更新と削除のオブジェクトを今すぐ削除することをお勧めします...そうでしょうか? –
最も直接的なパスに一連のトリガーをカスケード削除しておきたい場合があります。それはあなたの必要に応じて決まります。 – plushpuffin