簡體   English   中英

使用Fluent API配置ASP MVC 4的實體框架級聯刪除

[英]Entity Framework Cascade Delete using Fluent API Configuration asp mvc 4

我有兩個類,分別稱為User和Event。

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

用戶類與“朋友”具有多對多關系,如下所示:

[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; }
}

事件類與User具有一對多關系,如下所示:

[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; }

我的modelBuilder配置如下所示:

 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);

我希望能夠通過級聯刪除 (他的活動已組織,他的友情) 來刪除用戶

示例:如果刪除用戶,則要刪除該用戶組織的所有事件,並在其ID出現的每一行的用戶和朋友之間的中間表“ frienship”中刪除其userID。

我的捕獲異常的delete方法:

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語句與REFERENCE約束\\” FK_dbo.Event_dbo.User_OrganizerId \\“發生沖突。沖突發生在數據庫\\” Database \\“,表\\” dbo.Event \\“的列中'OrganizerId'。

**當我們要刪除的用戶具有特權時:**“ DELETE語句與REFERENCE約束\\” FK_dbo.Friendship_dbo.User_FriendId \\“發生沖突。沖突發生在數據庫\\”數據庫\\“,表\\” dbo.Friendship \\ ”,列“ FriendId”。

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

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

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

在“用戶”表中添加新列(在您的情況下為類的新屬性)“ isDeleted”,其類型為“位”(在您的情況下為布爾型)。 “ 0”代表假,“ 1”代表真。

希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM