C# 用存储过程填充ViewModel
我在Sql Server中创建了这个C# 用存储过程填充ViewModel,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,我在Sql Server中创建了这个存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[usp_GetUsrsofRole] (@RoleId int) AS ;WITH CTE_UsersInRole AS ( SELECT U.Id AS [UserId], U.Name AS [UserName] , U.Family AS [UserFamily] , R.I
存储过程
:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_GetUsrsofRole] (@RoleId int)
AS
;WITH CTE_UsersInRole AS
(
SELECT
U.Id AS [UserId], U.Name AS [UserName] , U.Family AS [UserFamily] , R.Id AS[RoleID],R.Name AS [RoleName]
FROM AspNetUserRoles AU
INNER JOIN AspNetRoles R ON R.Id=AU.RoleId
INNER JOIN AspNetUsers U ON U.ID=AU.UserId
)
SELECT
C.RoleID,C.RoleName,C.UserFamily,C.UserId,C.UserName
FROM CTE_UsersInRole C
WHERE C.RoleID=@RoleId
GO
这是我的视图模型:
public class UserInRoleVM
{
public string UserName { get; set; }
public string UserFamily { get; set; }
public string RoleName { get; set; }
public int RoleId { get; set; }
public int UserId { get; set; }
}
现在,我需要在asp Core中用以下代码填充视图模型:
public IEnumerable<UserInRoleVM> GetUserOfRole(int id)
{
List<UserInRoleVM> users = new List<UserInRoleVM>();
users = TableAsNoTracking.FromSql("EXEC usp_GetUsrsofRole @p0", id).ToList();
return users;
}
public IEnumerable GetUserOfRole(int-id)
{
列表用户=新列表();
users=TableAsNoTracking.FromSql(“EXEC usp_GetUsrsofRole@p0”,id).ToList();
返回用户;
}
但它给了我一个错误:
严重性代码说明项目文件行抑制状态
错误CS0029无法隐式转换类型
'System.Collections.Generic.List'
到
“System.Collections.Generic.List”FisziShimi.Services E:\MyProject\Farshid\Backend\FisziShimi\FisziShimi.Services\Services\UserRoleService.cs 26处于活动状态
我怎样才能解决这个问题
更新:
public DbSet<TEntity> Entities { get; }
public virtual IQueryable<TEntity> Table => Entities;
public virtual IQueryable<TEntity> TableAsNoTracking => Entities.AsNoTracking();
公共数据库集实体{get;}
公共虚拟IQueryable表=>实体;
公共虚拟IQueryable表AsNoTracking=>Entities.AsNoTracking();
您可以执行以下操作。使用上下文和表示视图模型的模型,您可以从存储过程中提取,如下所示
List<UserInRoleVM> users = new List<UserInRoleVM>();
using (var context = new DataContext())
{
SqlParameter Parameter = new SqlParameter("@p0", code);
users = context.Database.SqlQuery<UserInRoleVM>("exec usp_GetUsrsofRole @p0", Parameter).ToList();
}
return users;
列表用户=新列表();
使用(var context=new DataContext())
{
SqlParameter参数=新的SqlParameter(“@p0”,代码);
users=context.Database.SqlQuery(“exec usp_GetUsrsofRole@p0”,参数).ToList();
}
返回用户;
不确定它是否重要,但在存储过程中它是RoleID,在模型中它是RoleID。不确定这是否有区别。@CodeNotFound是