【发布时间】:2016-08-02 07:51:27
【问题描述】:
我有 2 个实体 Unit 和 UnitPerUnit。他们的角色是:
-
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 被删除,那么在public virtual EA_Unit Unit { get; set; } 或public virtual EA_Unit UnitTo { get; set; } 中保存已删除Unit 值的UnitPerUnit 条目也将被删除。
我该如何克服这个问题?我想设置数据库,这样数据库会在删除Unit 条目后自动删除UnitPerUnit 条目。
【问题讨论】:
-
使一个 FK 非级联。
标签: c# asp.net-mvc entity-framework asp.net-mvc-4