[英]How to implement a many to many relationship in ASP.NET using SQL Server
基本上,我試圖在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();
}
問題是您正在比較RoleId
和RoleCode
。
您將RoleCode
發送到GetRole
方法:
public void AddUserRole(string RoleCode, Guid UserId)
{
...
CommonLayer.Role Role = dar.GetRole(RoleCode);
...
}
但是,您的GetRole
方法將其與RoleId
進行比較
public CommonLayer.Role GetRole(string RoleCode)
{
return this.Entities.Roles.SingleOrDefault(p => p.RoleId == RoleCode);
}
更新:
我意識到您忘記將您的用戶添加到DbContext
,即您上下文中的this.Entities
。
public void AllocateUserRole(CommonLayer.User User, CommonLayer.Role Role)
{
User.Roles.Add(Role); // this does nothing to your Database.
//You should use this to add user to your context ( db )
this.Entities.Users.Add(User);
// or this if you want to update your user in your context ( db ).
this.Entities.Set<CommonLayer.User>().Attach(User);
this.Entities.Entry(User).State = EntityState.Modified;
this.Entities.SaveChanges();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.