为什么我不能删除父项,而其子项在外键上设置为WillCascadeOnDelete(false)
?实体框架无法删除父项,当子项具有WillCascadeOnDelete的外键(false)
这是父:
public class EA_Client
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
[Display(Name = "Client Id")]
public int ClientId { get; set; }
[Display(Name = "User Id")]
public int? UserId { get; set; }
[Display(Name = "Client Name")]
public string ClientName { get; set; }
public virtual AlvinCMSExtension.Models.UserProfile User { get; set; }
public EA_Client()
{
UserId = 0;
ClientName = "";
}
}
这是孩子:
public class EA_Order
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
[Display(Name = "Order Id")]
public int OrderId { get; set; }
[Display(Name = "Client Id")]
public int? ClientId { get; set; }
[Display(Name = "Supplier Id")]
public int? SupplierId { get; set; }
[Display(Name = "Total Amount To Pay")]
public decimal TotalAmountToPay { get; set; }
[Display(Name = "Order Time")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime OrderTime { get; set; }
[Display(Name = "Description")]
public string Description { get; set; }
public virtual ICollection<EA_OrderStatus> OrderStatuses { get; set; }
public virtual ICollection<EA_OrderDetail> OrderDetails { get; set; }
public virtual EA_Client Client { get; set; }
public virtual EA_Supplier Supplier { get; set; }
public EA_Order()
{
ClientId = null;
SupplierId = null;
TotalAmountToPay = 0;
OrderTime = DateTime.Now;
Description = "";
}
}
这是孩子的模型构造器:
mb.Entity<EA_Order>().HasOptional<EA_Client>(m => m.Client).WithMany().HasForeignKey(m => m.ClientId).WillCascadeOnDelete(false);
mb.Entity<EA_Order>().HasOptional<EA_Supplier>(m => m.Supplier).WithMany().HasForeignKey(m => m.SupplierId).WillCascadeOnDelete(false);
mb.Entity<EA_Order>().HasMany<EA_OrderStatus>(m => m.OrderStatuses);
mb.Entity<EA_Order>().HasMany<EA_OrderDetail>(m => m.OrderDetails);
每次我试图删除父(EA_Client),发生此错误:
{“DELETE语句与参考约束\”FK_EAccounting.EA_Order_EAccounting.EA_Client_ClientId \“发生冲突。冲突发生于数据库\ “EAccountingDB \”,表\ “EAccounting.EA_Order \”,列 '客户端Id'。\ r \ n该语句已终止。“}
如何解决这一问题?我想能够删除父母(EA_Client),因为父母是可选的,意味着可以让孩子(EA_Order)成为孤儿院入口。
你在你的子表中有这个Id,你应该将它设置为null,然后删除命令 –
这将非常麻烦,因为我需要将null设置为具有可选外键给EA_Client的其他实体。有没有办法让它自动化? –