我有2個實體Unit
和UnitPerUnit
。他們的角色是:MVC 4實體框架對同一個表的兩個外鍵導致週期或多個級聯路徑
Unit
:定義單位,比如公斤,米,釐米,院子裏,等...UnitPerUnit
:持有單位之間的數值(例如:1KG = 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'可能會導致循環或多個級聯路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。 無法創建約束。查看以前的錯誤。
我要的是如果Unit
被刪除,即持有的價值UnitPerUnit
條目要麼public virtual EA_Unit Unit { get; set; }
或刪除public virtual EA_Unit UnitTo { get; set; }
Unit
也將被刪除。
我該如何克服這個問題?我想設置數據庫,數據庫將在Unit
條目被刪除後自動刪除UnitPerUnit
條目。
讓一個FK非級聯。 –