我希望我的种子方法首先清除/删除数据库并清除所有旧数据,但是
context.Database.ExecuteSqlCommand("TRUNCATE TABLE [Purchases]");
context.Database.ExecuteSqlCommand("TRUNCATE TABLE [Invoices]");
给我
无法截断表“购买”,因为它已被FOREIGN KEY约束引用。
因为采购中的条目取决于发票中的条目。如何通过种子方法清除所有数据?
编辑:这些是相关的模型:
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; } }
}
有几种解决方案。
如果要清理整个数据库,最简单的解决方案就是重新创建整个数据库。更复杂的解决方案是删除外键,清理数据库并创建48个agan键。这可以是自动化的。手动执行此操作不是一个好主意。更好地进行下一个选择。
知道数据库的结构后,您就可以按顺序删除数据,这不会违反外键约束。这也可以自动化,但是需要更多的努力。但是,TRUNCE
以有效顺序手动编写s非常容易。
无法截断表“购买”,因为它已被FOREIGN KEY约束引用。
在这种情况下,首先确定要引用哪个表的表Purchases
,并在截断之前清除该表中的数据Purchases
。
WITH NOCHECK
如果您有循环引用,也没有办法删除数据而不删除(或标记)外键。
您也可以设置级联删除,但是我强烈建议您这样做,因为您有时可以删除不想删除的数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句