我们在EF中有一个案例:
我们有3个实体,比如用户,角色和部门。用户可以在每个部门中扮演一个或多个角色,这些角色可以是活动的或非活动的。因此,Mapping表中的列如下:
UserId,RoleId,DeptId,IsActive
我们目前正在通过为映射表创建另一个实体来管理映射,如果我必须删除关系,它会强制手动执行删除操作。
有没有一种方法可以在没有映射表的任何实体的情况下实现。
提前致谢。
答案 0 :(得分:0)
不,您无法避免连接实体创建,因为它不包含外键 - 您有IsActive
列。即它不是pure join table(PJT):
实体框架(Entity Framework)创建多对多关系 在数据模型中,表示多对多的连接表 关系只包含键。当Entity Framework创建数据时 模型,它不直接在数据模型中表示PJT表。 相反,实体框架创建了直接导航关系 在相关表之间,称为多对多关联。
但是在您的情况下,即使删除其他列也无济于事,因为实体框架需要在每一侧都有连接实体的集合(即直接导航关系)。但是,因此您将每个实体与其他两个实体连接起来,如果不提供额外的连接实体,则无法拥有此实体。
更新:您可以使用WillCascadeOnDelete
为此关系配置级联删除modelBuilder.Entity<User>()
.HasMany(u => u.RoleDepartments)
.WithRequired(urd => urd.User)
.WillCascadeOnDelete();
modelBuilder.Entity<Role>()
.HasMany(r => r.UserDepartments)
.WithRequired(urd => urd.Role)
.WillCascadeOnDelete();
modelBuilder.Entity<Department>()
.HasMany(d => d.UserRoles)
.WithRequired(urd => urd.Department)
.WillCascadeOnDelete();