我有兩個類叫做用戶和事件。實體框架級聯刪除使用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流暢配置?
謝謝你,但你真的不回答我的問題...... –
其他的解決方案,我看到的是從這裏刪除「hasRequired」: modelBuilder.Entity().HasRequired(E => e.Organizer) –
你能寫一個完整的例子嗎?因爲它很模糊......!記住每個活動都需要組織者......! –