Entity framework 如何在实体框架代码优先迁移中关闭多个1对1表与同一表的关系的级联删除

Entity framework 如何在实体框架代码优先迁移中关闭多个1对1表与同一表的关系的级联删除,entity-framework,entity-framework-migrations,Entity Framework,Entity Framework Migrations,我简化了下表的结构 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;

我简化了下表的结构

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; }
}
公共类用户配置文件
{
public int UserId{get;set;}
公共字符串用户名{get;set;}
公共字符串名{get;set;}
公共字符串姓氏{get;set;}
}
公务舱买家
{
public int BuyerId{get;set;}
public int UserId{get;set;}
公共用户配置文件用户{get;set;}
公共ICollection顺序{get;set;}
}
公共类卖家
{
public int SellerId{get;set;}
public int UserId{get;set;}
公共用户配置文件用户{get;set;}
公共ICollection命令{get;set;}
}
公共阶级秩序
{
公共int-OrderId{get;set;}
public int BuyerId{get;set;}
public int SellerId{get;set;}
公共字符串地址{get;set;}
公共医嘱行{get;set;}
}
公共类命令行
{
公共int-OrderId{get;set;}
public int OrderLineNo{get;set;}
public int StockId{get;set;}
公共整数数量{get;set;}
}
当我运行Update_Database命令时,我得到以下错误

在表“Buyers”上引入外键约束“FK_dbo.Buyers_dbo.UserProfile_UserId”可能会导致循环或多个级联路径。 删除无操作或更新无操作,或修改其他外键约束

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

因此,我想使用fluid语法关闭级联删除功能,只针对买家到用户,卖家到用户,但我无法使某些功能正常工作,因此如果有人能提供帮助,我将不胜感激

我已经查看了其他StackOVerflow问题以查找相同的错误,但找不到与我的场景匹配的问题


额外:如果我将Buyer表中的UserId重命名为DummyUserId,则Uppdate数据库命令可以工作,但效果不好。

通常可以使用
禁用级联删除。WillCascadeOnDelete(false)

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

        modelBuilder.Entity<Buyer>()
            .HasRequired(x => x.User)
            .WithMany()
            .HasForeignKey(x => x.UserId)
            .WillCascadeOnDelete(false);
modelBuilder.Entity()
.HasRequired(x=>x.User)
.有很多
.HasForeignKey(x=>x.UserId)
.WillCascadeOnDelete(假);

Map方法将数据库中的外键从UserId重命名为UserId,因此我仍然可以在代码中将其称为UserId。有没有办法不将Buyer表中的UserId数据库列重命名为UserId,但保留它的UserId,以便我的db列命名约定保持一致?对不起,这只是我的一个输入错误,您应该能够使用
Map(m=>m.MapKey(“UserId”)
。更新。重要的位是
.WillCascadeOnDelete(false)(您可以将其添加到现有映射设置中)。如果是UserId,则Update Database命令会给出错误,指定的架构无效。错误:(54,6):错误0019:类型中的每个属性名称必须是唯一的。已定义属性名“UserId”。