gpt4 book ai didi

entity-framework - Entity Framework 用户角色多对多关系

转载 作者:行者123 更新时间:2023-12-04 08:32:42 27 4
gpt4 key购买 nike

嗨,我正在尝试为用户和角色之间的多对多关系设置我的 Entity Framework 。

下图显示了数据库中的内容:

Many to Many relationships

用户模型是:

public class User : IEntity
{
public virtual int UserId { get; set; }
[Column(TypeName = "varchar")]
[StringLength(100)]
public virtual string UserName { get; set; }
[Column(TypeName = "varchar")]
[StringLength(100)]
public virtual string FirstName { get; set; }
[Column(TypeName = "varchar")]
[StringLength(100)]
public virtual string LastName { get; set; }
[Column(TypeName = "varchar")]
[StringLength(200)]
public virtual string EmailAddress { get; set; }
public int AreaId { get; set; }
[Column(TypeName = "varchar")]
[StringLength(64)]
public string CreatedByUserName { get; set; }
public DateTime CreatedDateTime { get; set; }
[Column(TypeName = "varchar")]
[StringLength(64)]
public string LastModifiedByUserName { get; set; }
public DateTime? LastModifiedDateTime { get; set; }

//Navigation properties
//public virtual Role Role { get; set; }
public virtual Area Area { get; set; }

public virtual ICollection<Role> Roles { get; set; }

}

角色模型是:
public class Role : IEntity
{
public int RoleId { get; set; }
[Column(TypeName = "varchar")]
[StringLength(100)]
public string Name { get; set; }
[Column(TypeName = "varchar")]
[StringLength(1000)]
public string Description { get; set; }
[Column(TypeName = "varchar")]
[StringLength(64)]
public string CreatedByUserName { get; set; }
public DateTime CreatedDateTime { get; set; }
[Column(TypeName = "varchar")]
[StringLength(64)]
public string LastModifiedByUserName { get; set; }
public DateTime? LastModifiedDateTime { get; set; }

//Navigation Properties
public ICollection<User> Users { get; set; }
}

用户角色是:
public class UserRole
{
public int UserId { get; set; }
public int RoleId { get; set; }

//Navigation properties
public virtual User User { get; set; }
public virtual Role Role { get; set; }
}

所以我以为我已经设置好了,但在我的代码中,我是这样的:
var roles = from r in user.Roles
select r.Name;

它会自己射击,给出以下错误:
Server Error in '/' Application.
Invalid object name 'dbo.RoleUser'.

所以我在上下文中添加了以下内容:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasMany(i => i.Roles)
.WithMany(u => u.Users);

}

但是现在我收到以下错误:

“/”应用程序中的服务器错误。
无效的列名“Role_RoleId”。
无效的列名“User_UserId”。

所以我肯定没有在这里正确设置一些东西。 andybody可以指出我正确的方向吗?

最佳答案

您不需要对链接表建模 UserRole作为一个类,因为它只有表的主键参与关系。所以删除 UserRole类(class)。

如果您正在对现有数据库建模,EF 可能会将链接表名称推断为 RoleUser .为避免这种情况,您可以按如下方式配置链接表。

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasMany(i => i.Roles)
.WithMany(u => u.Users)
.Map(m =>
{
m.ToTable("UserRole");
m.MapLeftKey("UserId");
m.MapRightKey("RoleId");
});

}

关于entity-framework - Entity Framework 用户角色多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8045064/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com