[英]Entity Framework Database First many-to-many
我从数据库中创建了一个Entity Framework模型。 我有多对多的关系: User
- UserRole
- Role
。
EF创建UserRole
实体UserRoles
导航属性在User
实体和Role
的实体,但我宁愿有Roles
的User
和Users
的Role
。 这是否可以通过模型设计师设计? 如何手动配置中间表的多对多关系?
如果UserRole表包含除User和Role表的外键之外的列,则EF通常会创建中间模型。
因此,如果UserRoles表中只有2列,则用户和角色表的FK(甚至不是代理键),EF都可以根据需要创建模型。 (没有任何中间模型)因此,这是一种方法,可以自动生成所需的行为。 表中只有2列。
但是如果你在这个表中有其他非键列(数据),那么EF正在做的是正确的。 你需要中间实体。
如果您没有任何非键列,不想再修改数据库,并且不需要在模型中使用此中间表,则可以手动修改OnModelCreating,以指定Many-to - 很多并隐藏中间表。
以下是所有步骤:
例如在User类中,
public virtual ICollection<Role> Roles { get; set; }
并在User构造函数中
this.Roles = new HashSet<Role>();
// on the OnModelCreating method, add this snippet
modelBuilder.Entity<User>().HasMany<Role>(u => u.Roles)
.WithMany(r => r.Users)
.Map(ru =>
{
ru.MapLeftKey("UserId");
ru.MapRightKey("RoleId");
ru.ToTable("UserRole");
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.