我有以下表结构简化如何关闭级联删除
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; }
}
在实体框架代码第一次迁移一个以上的1至1表之间的关系是相同的表当我运行Update_Database命令我得到的以下错误
引入表'买家'上的FOREIGN KEY约束'FK_dbo.Buyers_dbo.UserProfile_UserId'可能会导致周期或多个级联路径。 DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。
我的买方和卖方的表有对用户配置的用户ID 1对1的关系,所以我明白,当你删除它买方不能删除用户配置,因为有可能是卖方,反之亦然。
所以我想关闭级联删除,只有买方向用户和卖方使用流体语法给用户,但我不能得到的东西工作,所以如果有人可以帮助,将不胜感激。
我已经通过其他StackOVerflow问题看了同样的错误,但找不到符合我的方案。
额外:如果我将我的买方表中的UserId重命名为DummyUserId,那么Uppdate-Database命令可以工作,但这并不好。
地图方法改名从用户ID的外键的用户ID在数据库,所以我仍然可以在代码中将其称为UserId。有没有一种方法可以让Buyer表中的UserId数据库列重命名为UserID但保留UserId以便我的数据库列命名约定保持一致? – greay
对不起,这只是我的一个错字,你应该可以使用'Map(m => m.MapKey(“UserId”))'。更新。重要的是'.WillCascadeOnDelete(false);'(你可以添加到你现有的映射设置中)。 – Chris
如果是UserId,则Update-Database命令会给出指定错误的Schema无效。错误: (54,6):错误0019:类型中的每个属性名称必须是唯一的。属性名称'UserId'已经被定义。 – greay