我遇到问题。我有一个用户它可以有很多角色,但角色是全球性的,所以我成立了一个表结构如下:实体框架和角色
CREATE TABLE [dbo].[Users](
[Id] [nvarchar](128) NOT NULL,
[UserName] [nvarchar](max) NULL,
[Email] [nvarchar](max) NULL,
[DateCreated] [datetime] NOT NULL,
[DateModified] [datetime] NULL,
[LastLoginDate] [datetime] NOT NULL,
[PasswordHash] [nvarchar](max) NULL,
CONSTRAINT [PK_dbo.Users] PRIMARY KEY CLUSTERED
CREATE TABLE [dbo].[UserRoles](
[UserId] [nvarchar](128) NOT NULL,
[RoleId] [nvarchar](128) NOT NULL,
CONSTRAINT [PK_dbo.UserRoles] PRIMARY KEY CLUSTERED
(
[UserId] ASC,
[RoleId] ASC
)
CREATE TABLE [dbo].[Roles](
[Id] [nvarchar](128) NOT NULL,
[Name] [nvarchar](max) NULL,
CONSTRAINT [PK_dbo.Roles] PRIMARY KEY CLUSTERED
(
[Id] ASC
)
的的UserRole表已foriegn键设置对于角色和用户表分别对应Id列。
在我的代码,我有这样的:
public class User : IUser
{
public string Id { get; set; }
// Stripped for brevity
public IList<UserRole> Roles { get; set; }
public User()
{
this.Id = Guid.NewGuid().ToString();
}
}
public class UserRole
{
public string RoleId { get; set; }
public string UserId { get; set; }
}
public class Role : IRole
{
public string Id { get; set; }
public string Name { get; set; }
public IList<UserRole> Users { get; set; }
public Role()
{
this.Id = Guid.NewGuid().ToString();
}
}
的EntityFramework是好的这个类和我的映射如下:
modelBuilder.Entity<UserRole>().HasKey(m => new { m.UserId, m.RoleId });
一切为了映射工作。 现在我真正想要的,是用户类有一个列表角色而不是用户角色。
所以,我想它是这样的:
public class User : IUser
{
public string Id { get; set; }
// Stripped for brevity
public IList<Role> Roles { get; set; }
public User()
{
this.Id = Guid.NewGuid().ToString();
}
}
我相信你可以看到这里的问题。 有人可以想到一个解决方案,我的表结构保持不变,但我可以访问角色而不是UserRoles?
对不起,如果我的解释不好。
我不应该在这里创建另一个表,我必须做些事情才能使模型有权访问角色而不是UserRole。 – r3plica 2014-11-05 11:29:39
这个答案只使用你已有的三张表。事实上,你只需要在dbContext中拥有用户和角色,UserRole表就存在于数据库中,只是为了提供他们之间的映射。 – 2014-11-05 11:31:04