Dapper Query不会从类型对象填充参数'属性出于某种原因。
以下代码抛出一个异常,说我必须声明@Username,即使凭据包含属性credentials.Username
:
const string qryCheckCredentials = "SELECT 1 AS Authenticated FROM dbo.KIUser WHERE Username=@Username AND Password=@PasswordMD5";
if (!sqlConn.Query<Boolean>(qryCheckCredentials, param: credentials).FirstOrDefault<Boolean>())
throw new UnauthorizedAccessException..
但是,如果我明确地将凭证属性列入匿名对象,它可以正常工作:
const string qryCheckCredentials = "SELECT 1 AS Authenticated FROM dbo.KIUser WHERE Username=@Username AND Password=@PasswordMD5";
if (!sqlConn.Query<Boolean>(qryCheckCredentials, param: new { Username = credentials.Username, PasswordMD5 = credentials.PasswordMD5 } ).FirstOrDefault<Boolean>())
throw new UnauthorizedAccessException..
任何想法为什么?我在我的代码中遇到了这个问题,无法查看模式或弄清楚我错过的内容。
凭据类型:
[DataContract]
public class Credentials
{
[DataMember]
public string Username;
[DataMember]
public string PasswordMD5;
}
发生了许多类型,并通过它们列出明确解决了问题。
(DataContract / DataMember属性修饰是因为该对象是WDSL界面的一部分 - 可能无关紧要但留在这里,以防他们因某些原因而非相关的原因。)
答案 0 :(得分:3)
我最好的猜测是Dapper只关注属性,而不是字段。尝试将您的课程更改为以下内容,看看它是否有效。
[DataContract]
public class Credentials
{
[DataMember]
public string Username {get; set;}
[DataMember]
public string PasswordMD5 {get; set;}
}
无论如何,使用公共财产通常被认为是更好的做法。