【发布时间】:2016-04-03 11:41:57
【问题描述】:
基本上,我试图在 SQL Server 2010 的中间表中插入一个 userId 值和一个 RoleId 值。问题是代码没有到达表并且它保持为空,而使用断点,我可以看到分配角色的值是正确的。我正在使用 ASP.NET MVC 5 作为学校项目,我试图在网站中为用户提供不同权限的角色。
设置角色的方法在业务层:
public void RegisterUser(CommonLayer.User User, string ConfirmPassword)
{
CommonLayer.User Existing = this.GetUser(User.UserEmail);
BuisnessLayer.Roles roles = new BuisnessLayer.Roles();
if (Existing == null)
{
if (User.UserPassword.Equals(ConfirmPassword))
{
User.UserId = Guid.NewGuid();
User.UserPassword = HashSHA512String(User.UserPassword, User.UserId.ToString());
User.UserTypeId = (1);
this.AddUser(User);
roles.AddUserRole("USR",User.UserId);
}
}
}
AddUserRole 似乎是问题所在,因为它没有在表中插入业务逻辑中AddUserRole 的方法是:
public void AddUserRole(string RoleCode, Guid UserId)
{
DataLayer.DARoles dar = new DataLayer.DARoles(this.entities);
DataLayer.DAUsers dau = new DataLayer.DAUsers(this.entities);
CommonLayer.User User = dau.GetUser(UserId);
CommonLayer.Role Role = dar.GetRole(RoleCode);
dar.AllocateUserRole(User, Role);
}
以下是数据层中GetUser和GetRole的代码:
public CommonLayer.User GetUser(Guid UserId)
{
return this.Entities.Users.SingleOrDefault(p => p.UserId.Equals(UserId));
}
public CommonLayer.Role GetRole(string RoleCode)
{
return this.Entities.Roles.SingleOrDefault(p => p.RoleId == RoleCode);
}
而且,这里是数据层中的AllocateUserRole:
public void AllocateUserRole(CommonLayer.User User, CommonLayer.Role Role)
{
User.Roles.Add(Role);
this.Entities.SaveChanges();
}
【问题讨论】:
-
您应该查看 Microsoft 成员资格提供程序的示例代码。 User 和 Role 的标识符都是 GUID,示例应该为您提供有关实现功能的可用方法的一些指导。您包含的代码不是很清楚或不完整,因此您必须自己付出更多的努力。
-
那么,GetUser 和 GetRole 能找到您所期望的吗?问题仅在 AllocateUserRole 中吗?
-
AllocateUSerRole 似乎是问题,因为 GetUser 和 GetRole 都从数据库中获取值
-
我认为你想要一个 UserRole 类,并且 User 应该有一个集合。
-
没有 SQL Server 2010 - 我们有 2000、2005、2008、2008 R2、2012、2014 和 2016 正在准备中 - 你真的是哪一个 使用?
标签: c# sql-server asp.net-mvc entity-framework asp.net-mvc-5