我有以下表結構簡化如何關閉級聯刪除
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