簡體   English   中英

如何使用SQL Server在ASP.NET中實現多對多關系

[英]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);
}

以下是數據層中GetUserGetRole的代碼:

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();
}

數據庫表都具有正確的數據類型

在此處輸入圖片說明

問題是您正在比較RoleIdRoleCode

您將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM