c# - 用存储过程填充 ViewModel
问题描述
我Stored Procedure
在 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.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;
}
但它给了我这个错误:
严重性代码 描述 项目文件行抑制状态错误 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();
解决方案
您可以执行以下操作。使用您的上下文和代表您的视图模型的模型,您可以像这样从存储过程中提取。
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;
不确定它是否重要,但在您的存储过程中它的 RoleID 和在您的模型中它的 RoleId。不确定它是否有所作为。
推荐阅读
- python-3.x - 如何检查井字游戏中的一系列动作是否有效
- c - C中的Sigaction和setitimer
- swift - 在 Swift 中动画一组 NSView 以在 NSStackView 中一个接一个出现的最佳方式是什么?
- sql - 内存中 DB 到字节
- android - 如何将 Blob(在 Sqlite 中)转换为正确的字符串?
- prolog - Prolog-找到0以上的任何数字
- ruby-on-rails - Rails 6:未初始化的常量 ActionText::Engine::ApplicationController (NameError)
- c - 警告:从不兼容的指针类型赋值 [默认启用] 并从不同大小的整数转换为指针 [-Wint-to-pointer-cast]
- python - 无法在 docker 中导入我编译的 cython 模块
- python - 如何一次填充多列的 Nan 值?