【发布时间】:2016-08-02 23:21:19
【问题描述】:
我有以下类和 EF 约定可以很好地创建表格 - 一切都很好。现在我想在 ToDoList 上配置级联删除(这样当我删除 ToDoList 时,所有 ToDoItems 和 UserToDoLists 也会自动删除)。为了设置 WillCascadeOnDelete,我必须重新指定能够检测到的 EF 约定吗?如何在 fluent API 中指定这种关系?
public class ToDoList
{
public int Id { get; set; }
public string Description { get; set; }
public virtual ICollection<ToDoItem> ToDoItems { get; set; }
public virtual ICollection<UserToDoList> UserToDoLists { get; set; }
}
public class ApplicationUser : IdentityUser
{
public ApplicationUser()
: base()
{
}
public virtual ICollection<UserToDoList> UserToDoLists { get; set; }
}
// a todolist can have many users and a user can have many todolist
// junction table will have addition fields
public class UserToDoList
{
public string UserId { get; set; }
public virtual ApplicationUser User { get; set; }
public virtual int ToDoListId { get; set; }
public virtual ToDoList ToDoList { get; set; }
// additional fields
public bool IsOwner { get; set; }
public int Ordinal { get; set; }
public bool AllowEdit { get; set; }
}
public class UserToDoListConfig : EntityTypeConfiguration<UserToDoList>
{
public UserToDoListConfig()
{
HasKey(ut => new { ut.UserId, ut.ToDoListId });
}
}
public class ToDoListConfig : EntityTypeConfiguration<ToDoList>
{
public ToDoListConfig()
{
Property(t => t.Description).IsRequired().HasMaxLength(50);
HasMany(t =>t.UserToDoLists).??
}
}
【问题讨论】:
-
级联删除应该是像您这样的
one-to-many关系的默认行为。你检查生成的表/外键了吗? -
我的是多对多关系
-
@lee23 你正在考虑
Application-ToDoList这确实是many-to-many。但是您使用显式的UserToDoList联结表和2 个one-to-many关系User-UserToDoList和ToDoList-UserToDoList实现了它。同样,这些关系默认情况下具有级联删除功能。
标签: entity-framework ef-fluent-api