我有以下表结构简化
public class UserProfile
{
public int UserId { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string Surname { get; set; }
}
public class Buyer
{
public int BuyerId { get; set; }
public int UserId { get; set; }
public UserProfile User { get; set; }
public ICollection<Order> Order { get; set; }
}
public class Seller
{
public int SellerId { get; set; }
public int UserId { get; set; }
public UserProfile User { get; set; }
public ICollection<Order> Orders { get; set; }
}
public class Order
{
public int OrderId { get; set; }
public int BuyerId { get; set; }
public int SellerId { get; set; }
public string Address { get; set; }
public <OrderLine> OrderLines { get; set; }
}
public class OrderLine
{
public int OrderId { get; set; }
public int OrderLineNo { get; set; }
public int StockId { get; set; }
public int Quantity { get; set; }
}
当我运行Update_Database命令时,我收到以下错误
在表'买家'上引入FOREIGN KEY约束'FK_dbo.Buyers_dbo.UserProfile_UserId'可能会导致循环或多个级联路径。 DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。
我的买家和卖家表与UserId上的UserProfile有一对一的关系,所以我理解当你删除买家时,它不能删除UserProfile,因为可能有卖家,反之亦然。
因此,我想使用流畅的语法关闭买方对用户和卖方给用户的级联删除,但是我无法获得某些工作,所以如果有人可以提供帮助,我们将不胜感激。
我已经查看了其他StackOVerflow问题以查找相同的错误,但找不到与我的方案匹配的问题。
额外:如果我将Buyer表中的UserId重命名为DummyUserId,则Uppdate-Database命令可以正常工作,但这并不好。
答案 0 :(得分:1)
通常您可以使用.WillCascadeOnDelete(false);
因此,对于您的映射,可能具有类似于以下内容的内容:
modelBuilder.Entity<Buyer>()
.HasRequired(x => x.User)
.WithMany()
.HasForeignKey(x => x.UserId)
.WillCascadeOnDelete(false);