2015-05-25 54 views
1

我有兩個類叫做用戶和事件。實體框架級聯刪除使用Fluent API配置asp mvc 4

用戶可以組織活動,並可以有朋友(用戶)。

用戶類與朋友多到多的關係,如下圖所示:

[Table("User")] 
public class User 
{ 
    public User() { 
    EventOrganized = new List<Event>(); 
    } 
    public virtual ICollection<User> Friends { get; set; } 
    public virtual ICollection<Event> EventOrganized { get; set; } 
} 

事件類與用戶一個一對多的關係,象下面這樣:

[Table("Event")] 
public class Event 
{ 
    public int OrganizerId { get; set; } 
    [ForeignKey("OrganizerId")] 

    public virtual User Organizer { get; set; } 
} 

我的上下文有:

public DbSet<User> Users { get; set; } 
public DbSet<Event> Events{ get; set; } 

我的模型構建器的配置是這樣的:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 
    modelBuilder.Entity<User>().HasMany(u => u.Friends).WithMany().Map(
      u => 
      { 
       u.MapLeftKey("UserId"); 
       u.MapRightKey("FriendId"); 
       u.ToTable("Friendship"); 
      }); 
    modelBuilder.Entity<Event>().HasRequired(e => e.Organizer).WithMany().WillCascadeOnDelete(false); 

我希望能夠刪除與級聯用戶刪除(他的活動安排,他frienships)。

例: 如果我刪除一個用戶,我想刪除該用戶組織的所有活動,並在他的ID出現的每一行中刪除他的用戶ID的用戶和好友之間的中間表「之間的友誼」。

我的刪除方法,它捕獲異常:

Try { 
List<int> friendsIds = userToRemove.Friends.Select(f => f.UserId).ToList(); 
    foreach (int friendID in friendsIds) 
    { 
     User friend = db.Users.Find(friendID); 
     friend.Friends.Remove(userToRemove); 
    } 
db.Users.Remove(userToRemove); 
SaveChanges(); 
Catch(Exception) {} 

當用戶已經組織了一個事件,例外是: 「DELETE語句衝突與基準約束\」 FK_dbo.Event_dbo.User_OrganizerId \」。 衝突發生於數據庫\ 「數據庫\」,表\ 「dbo.Event \」,列 'OrganizerId'

**當用戶我們要刪除具有frienships:** 「DELETE語句與衝突參考資料aint \「FK_dbo.Friendship_dbo.User_FriendId \」。衝突發生在數據庫\「數據庫\」,表\「dbo.Friendship \」,列'FriendId'。

我該如何修改我的Api流暢配置?

回答

0

您不能刪除其他表中用外鍵引用PK的用戶。

在這種情況下,你可以使用其他邏輯刪除用戶,例如:

在用戶表中添加新列(在類的情況下,新的屬性)「請將isDeleted」,這類型是「位」(你的情況布爾類型)。 '0'爲false,'1'爲true。

我希望是有幫助的。

+0

謝謝你,但你真的不回答我的問題...... –

+0

其他的解決方案,我看到的是從這裏刪除「hasRequired」: modelBuilder.Entity ().HasRequired(E => e.Organizer) –

+0

你能寫一個完整的例子嗎?因爲它很模糊......!記住每個活動都需要組織者......! –