2つのエンティティUnit
およびUnitPerUnit
があります。それらの役割は次のとおりMVC 4エンティティフレームワーク同じテーブルへの2つの外部キー原因サイクルまたは複数のカスケードパス
Unit
:UnitPerUnit
...等キロメーター、センチメートル、庭、等の単位を定義します(例:1キロ= 1000gr)単位の間の値を保持
ここでは、コードは次のようになります。
[Table("EA_Unit", Schema = "EAccounting")]
public class EA_Unit
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
[Display(Name = "Unit Id")]
public int UnitId { get; set; }
[Display(Name = "Unit Name")]
[Index("UnitName", IsUnique = true)]
[MaxLength(20)]
[Required]
public string UnitName { get; set; } //Example kg, piece, roll, yard, meter
public EA_Unit()
{
UnitName = "";
}
}
[Table("EA_UnitPerUnit", Schema = "EAccounting")]
public class EA_UnitPerUnit
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
[Display(Name = "Unit Per Unit Id")]
public int UnitPerUnitId { get; set; }
[Display(Name = "From Unit")]
[Required]
[Index("UnitToUnit", 1, IsUnique = true)]
public int UnitId { get; set; }
[Display(Name = "To Name")]
[Required]
[Index("UnitToUnit", 2, IsUnique = true)]
public int UnitToUnit { get; set; } //The comparer unit
[Display(Name = "Amount")]
[Required]
public float UnitAmount { get; set; } //how much is this unit to another unit (ex: 1kg = 1000gr)
[ForeignKey("UnitId")]
public virtual EA_Unit Unit { get; set; }
[ForeignKey("UnitToUnit")]
public virtual EA_Unit UnitTo { get; set; }
public EA_UnitPerUnit()
{
UnitId = 0;
UnitToUnit = 0;
UnitAmount = 0;
}
}
私はプログラムを実行し、データベースを作成するたびに、このエラーがあります:
'EA_UnitPerUnit'テーブルのFOREIGN KEY制約 'FK_EAccounting.EA_UnitPerUnit_EAccounting.EA_Unit_UnitToUnit'を導入すると、サイクルまたは複数のカスケードパスが発生する可能性があります。 NO DELETE NO ACTIONまたはUP UP NO NO ACTIONを指定するか、他のFOREIGN KEY制約を変更してください。 制約を作成できませんでした。以前のエラーを参照してください。
は、私が欲しいのはUnit
が削除された場合、その値を保持UnitPerUnit
エントリも削除されますpublic virtual EA_Unit Unit { get; set; }
またはpublic virtual EA_Unit UnitTo { get; set; }
のいずれかでUnit
を削除しています。
どうすればこの問題を解決できますか?私はデータベースがUnitPerUnit
のエントリを自動的に削除するようにデータベースを設定したいのですが、Unit
のエントリが削除された後にそれを削除します。
1 FK非カスケードを行います。 –