.NET Dapper 范围
Posted
技术标签:
【中文标题】.NET Dapper 范围【英文标题】:.NET Dapper range 【发布时间】:2014-01-13 14:19:46 【问题描述】:我最近一直在为我的 API 运行 Dapper 扩展库。以下代码根据单个用户 ID 返回用户列表及其相应地址:
public User GetUserBicProfiles(string userId)
using (
var multipleResults = this.db.QueryMultiple("sp_UserPermisisons", new userId =
userId,commandType: CommandType.StoredProcedure))
var user = multipleResults.Read<User>().SingleOrDefault();
var permissions= multipleResults.Read<Permissions>().ToList();
if (user != null&& permissions != null)
user.Permissions.AddRange(permissions);
return user;
这很好用,但是当我尝试使用相同的详细信息集,但没有 userId 作为参数(应该返回具有各自权限的所有用户)时,我收到与添加范围有关的错误。
System.Collections.Generic.List' 不包含“UserPermissions”的定义,并且找不到接受“System.Collections.Generic.List”类型的第一个参数的扩展方法“UserPermissions”(您是否缺少使用指令还是程序集引用?)
全部返回的方法是:
public List<User> GetUsers()
using (var multipleResults = this.db.QueryMultiple("sp_UserPermissions",commandType: CommandType.StoredProcedure))
var user = multipleResults.Read<User>().ToList();
var permissions = multipleResults.Read<Permissions>().ToList();
if (user != null && permissions != null)
user.Permissions.AddRange(permissions);
return user;
用户类是:
public class User
public User()
this.Permissions = new List<Permissions>();
public string UserId get; set;
public string UserName get; set;
public string ApplicationName get; set;
public string Email get; set;
public string Comment get; set;
public string Password get; set;
public string PasswordQuestion get; set;
public string PasswordAnswer get; set;
public bool? IsApproved get; set;
public DateTime LastActivityDate get; set;
public DateTime LastLoginDate get; set;
public DateTime LastPasswordChangeDate get; set;
public DateTime CreationDate get; set;
public bool? IsOnline get; set;
public bool? IsLockedOut get; set;
public DateTime LastLockedOutDate get; set;
public bool? FailedPasswordAttempCount get; set;
public DateTime FailedPasswordAttemptWithStart get; set;
public bool? FailedPasswordAnswerAttemptCount get; set;
public DateTime FailedPasswordAnsdwerAttemptWindowStart get; set;
public List<Permissions> Permissions get; set;
【问题讨论】:
如果没有传入userId,你确定存储过程会返回吗? 没有名为UserPermissions
的类成员,如何存在名为Permissions
的类mbr
更正UserPermissions,应该是Permissions。
克里斯,如果我注释掉它试图添加范围的行并进行调试,我会看到从 SQL 返回的权限列表 - 在 SQL 中执行存储的过程,无论是否有参数都有效
【参考方案1】:
该错误是因为您试图访问 List<User>
对象上的 Permissions
对象,该对象既不作为属性存在,也不作为扩展方法存在。
在您的第一个示例中,变量 user 的类型为 User
,您使用 SingleOrDefault()
方法返回单个 User
对象。
...
var user = multipleResults.Read<User>().SingleOrDefault();
var permissions= multipleResults.Read<Permissions>().ToList();
if (user != null&& permissions != null)
user.Permissions.AddRange(permissions);
return user; // --> user type is User
...
虽然在第二个示例中,变量 user 的类型为 List<User>
,但您使用 ToList()
方法返回了 User
对象 (List<User>
) 的列表。
...
var user = multipleResults.Read<User>().ToList();
var permissions = multipleResults.Read<Permissions>().ToList();
if (user != null && permissions != null)
user.Permissions.AddRange(permissions);
return user; // --> user type is List<User>
...
【讨论】:
好的,我明白你现在的建议了。那么,我需要添加内联类的新实例吗?列表等 是的,你是对的。问题不在于返回的类型(User
或 List<User>
都可以)。问题是Permissions
属于 A User
(每个用户都应该有自己的权限列表)而不是User
的列表。以上是关于.NET Dapper 范围的主要内容,如果未能解决你的问题,请参考以下文章