【发布时间】:2014-11-05 19:45:22
【问题描述】:
我有一个问题。我有一个User,可以有很多Roles,但是Roles是全局的,所以我设置了一个表结构如下:
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
)
UserRoles 表在各自的 Id 上为 Roles 和 Users 表设置了外键列。
在我的代码中,我有这个:
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 });
映射的一切工作。 现在我真正想要的是 User 类有一个 Roles 列表,而不是 UserRoles。
所以,我希望它看起来像这样:
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();
}
}
我相信您可以在这里看到问题。 有人能想出一个解决方案,让我的表结构保持不变,但我可以访问 Roles 而不是 UserRoles?
对不起,如果我的解释不好。
【问题讨论】:
标签: c# entity-framework