我希望我的种子方法首先清除/删除数据库并删除所有旧数据,但是
context.Database.ExecuteSqlCommand("TRUNCATE TABLE [Purchases]");
context.Database.ExecuteSqlCommand("TRUNCATE TABLE [Invoices]");
给我
Cannot truncate table 'Purchases' because it is being referenced by a FOREIGN KEY constraint.
因为采购中的条目依赖于发票中的条目。如何通过种子方法清除所有数据?
编辑:这些是相关模型:
public class Invoice
{
//Primary Key
public int InvoiceID { get; set; }
//Misc. info
public DateTime CreationDate { get; set; }
public DateTime DeadlineDate { get; set; }
public string ReceiverName { get; set; }
//Order details
public virtual List<Purchase> Purchases { get; set; }
//Auto-calculated property
[DataType(DataType.Currency)]
public float TotalCost { get; set; }
//Invoice author info
public string AuthorName { get; set; }
public string AuthorID { get; set; }
}
public class Purchase
{
public int PurchaseID { get; set; }
public string ProductDescription { get; set; }
public float SinglePrice { get; set; }
public float Amount { get; set; }
public float TotalPrice { get { return Amount * SinglePrice; } }
}
最佳答案
有几种解决方案。
如果您想清理整个数据库,最简单的解决方案就是重新创建整个数据库。更复杂的解决方案是删除外键,清理数据库并再次创建外键。这可以自动化。手动执行此操作不是一个好主意。最好继续进行下一个选项。
了解您的数据库结构后,您可以按顺序删除数据,这不会违反外键约束。这也可以自动化,但需要付出更多努力。然而,手动按有效顺序编写
TRUNCE
是不是很容易?Cannot truncate table 'Purchases' because it is being referenced by a FOREIGN KEY constraint.
在这种情况下,首先确定哪个表引用表
Purchases
,并在截断Purchases
之前清理该表中的数据。此外,如果您有循环引用,则无法在不删除(或标记
WITH NOCHECK
)外键的情况下删除数据。您还可以设置级联删除,但我强烈建议您不要这样做,因为您偶尔会删除不想删除的数据。
关于c# - 如何清除数据库的外键约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38534804/