0

我简化了下表结构

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 命令时,出现以下错误

在表 'Buyers' 上引入 FOREIGN KEY 约束 'FK_dbo.Buyers_dbo.UserProfile_UserId' 可能会导致循环或多个级联路径。DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

我的买家和卖家表与 UserId 上的 UserProfile 具有 1 对 1 的关系,因此我了解当您删除买家时,它无法删除 UserProfile,因为可能存在卖家,反之亦然。

因此,我想使用流畅的语法关闭仅买家到用户和卖家到用户的级联删除,但我无法工作,如果有人可以提供帮助,我将不胜感激。

我查看了其他 StackOVerflow 问题是否存在相同的错误,但找不到与我的场景匹配的问题。

额外:如果我将买家表中的 UserId 重命名为 DummyUserId,那么 Uppdate-Database 命令可以工作,但这并不好。

4

1 回答 1

1

通常您可以使用禁用级联删除.WillCascadeOnDelete(false);

因此,对于您的映射,您可能会有类似于以下内容的内容:

        modelBuilder.Entity<Buyer>()
            .HasRequired(x => x.User)
            .WithMany()
            .HasForeignKey(x => x.UserId)
            .WillCascadeOnDelete(false);
于 2013-08-06T13:47:25.083 回答