2013-08-06 55 views
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; } 
} 

在實體框架代碼第一次遷移一個以上的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命令可以工作,但這並不好。

回答

1

通常你可以禁用級聯刪除使用.WillCascadeOnDelete(false);

所以對你的映射,你可能有類似下面的內容:

 modelBuilder.Entity<Buyer>() 
      .HasRequired(x => x.User) 
      .WithMany() 
      .HasForeignKey(x => x.UserId) 
      .WillCascadeOnDelete(false); 
+0

地圖方法改名從用戶ID的外鍵的用戶ID在數據庫,所以我仍然可以在代碼中將其稱爲UserId。有沒有一種方法可以讓Buyer表中的UserId數據庫列重命名爲UserID但保留UserId以便我的數據庫列命名約定保持一致? – greay

+0

對不起,這只是我的一個錯字,你應該可以使用'Map(m => m.MapKey(「UserId」))'。更新。重要的是'.WillCascadeOnDelete(false);'(你可以添加到你現有的映射設置中)。 – Chris

+0

如果是UserId,則Update-Database命令會給出指定錯誤的Schema無效。錯誤: (54,6):錯誤0019:類型中的每個屬性名稱必須是唯一的。屬性名稱'UserId'已經被定義。 – greay