【发布时间】:2015-05-25 10:51:03
【问题描述】:
我有两个类叫做 User 和 Event。
用户可以组织活动,并且可以有朋友(用户)。
User 类与 Friends 是多对多的关系,如下所示:
[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; }
}
Event 类与 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; }
我的模型构建器配置如下:
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 出现的每一行删除用户和朋友之间的中间表“友谊”中的用户 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 语句与 REFERENCE 约束 \"FK_dbo.Event_dbo.User_OrganizerId\" 冲突。 数据库“Database”、表“dbo.Event”、“OrganizerId”列中发生冲突。
**当我们要删除的用户有友谊时:** "DELETE 语句与 REFERENCE 约束 \"FK_dbo.Friendship_dbo.User_FriendId\" 冲突。冲突发生在数据库 \"Database\"、表 \"dbo.Friendship\"、列 'FriendId' 中。
我应该如何修改我的 Api fluent 配置?
【问题讨论】:
标签: c# entity-framework asp.net-mvc-4