[英]Many to Many Mapping in EF
我们在EF中有一个案例:
我们有3个实体,例如用户,角色和部门。 用户可以在每个部门中扮演一个或多个角色,并且可以是活动的或不活动的。 因此,“映射”表中的列如下:
UserId,RoleId,DeptId,IsActive
当前,我们正在通过创建用于映射表的另一个实体来管理映射,如果必须删除关系,该实体将强制手动执行删除操作。
有没有一种方法可以在没有任何实体映射表的情况下实现这一目标。
提前致谢。
不,您不能避免创建结实体,因为它不只包含外键-您具有IsActive
列。 即它不是纯联接表 (PJT):
当表示多对多关系的联接表仅包含键时,实体框架(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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.