Je travaille sur mon projet basé sur ASP.net Core 2.0. J'ai créé ApplicationRole
et ApplicationUser
classe. J'ai écrit un extrait de code pour créer des rôles lorsque j'exécute mon projet, j'ai cette erreur:
System.Data.SqlClient.SqlException: 'Nom de colonne non valide' ApplicationRoleId '.
Mais le même code que j'utilise dans ASP.net Core 1.1 n'a eu aucun problème.
Je pense qu'il a un problème avec cette ligne de code:
lineNumberOfUsers = r.Users.Count
Parce que lorsque je commente, ce projet de code fonctionne bien, mais j'ai besoin d'un nombre d'utilisateurs pour chaque rôle.
Manette:
public class ApplicationRoleController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly RoleManager<ApplicationRole> _roleManager;
public ApplicationRoleController(UserManager<ApplicationUser> userManager, RoleManager<ApplicationRole> roleManager)
{
_userManager = userManager;
_roleManager = roleManager;
}
public IActionResult Index()
{
List<ApplicationRoleViewModel> models = new List<ApplicationRoleViewModel>();
models = _roleManager.Roles.Select(r => new ApplicationRoleViewModel
{
Id = r.Id,
Name = r.Name,
Description = r.Description,
NumberOfUsers = r.Users.Count
}).ToList();
return View(models);
}
}
Modèle
public class ApplicationRole : IdentityRole
{
public string Description { get; set; }
public virtual ICollection<ApplicationUser> Users { get; } = new List<ApplicationUser>();
}
J'ai vérifié la requête SQL dans le profileur de serveur SQL. quand j'ai exécuté une requête SQL dans le serveur SQL, j'ai eu la même erreur.
Nom de colonne non valide 'ApplicationRoleId'.
SELECT [r].[Id], [r].[Name], [r].[Description], (
SELECT COUNT(*)
FROM [AspNetUsers] AS [a]
WHERE [r].[Id] = [a].[ApplicationRoleId]
) AS [NumberOfUsers]
FROM [AspNetRoles] AS [r]
La propriété de navigation Users
dans votre ApplicationRole
classe n'est pas nécessaire.
La relation entre les tables AspNetUsers
et AspNetRoles
est présente dans une table séparée en AspNetUserRoles
tant que clés étrangères. Ainsi, lorsque vous souhaitez interroger le nombre d'utilisateurs dans un rôle donné, vous devez interroger cette table AspNetUserRoles
. Pour y parvenir, vous pouvez appeler
_userManager.GetUsersInRoleAsync("roleName").Result.Count;
Pour ce faire, implémentez votre méthode d'action Index comme ceci:
public IActionResult Index()
{
List<ApplicationRoleViewModel> models = new List<ApplicationRoleViewModel>();
models = _roleManager.Roles.Select(r => new ApplicationRoleViewModel
{
Id = r.Id,
Name = r.Name,
Description = r.Description
// notice I am not assigning NumberOfUsers here.See further down...
}).ToList();
foreach(var m in models)
{
m.NumberOfUsers = _userManager.GetUsersInRoleAsync(m.Name).Result.Count;
}
return View(models);
}
J'espère que cela t'aides.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots