![](/img/trans.png)
[英]Entity Framework Fluent API - Cascade Delete - With Interface
[英]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.