C# 得体元';除非明确列为匿名类型,否则无法读取对象属性

C# 得体元';除非明确列为匿名类型,否则无法读取对象属性,c#,dapper,C#,Dapper,出于某种原因,Dapper查询没有从类型化对象的属性填充参数 以下代码引发异常,表示我必须声明@Username,即使凭据包含属性凭据。Username: const string qryCheckCredentials = "SELECT 1 AS Authenticated FROM dbo.KIUser WHERE Username=@Username AND Password=@PasswordMD5"; if (!sqlConn.Query<Boolean>(qryChec

出于某种原因,Dapper查询没有从类型化对象的属性填充参数

以下代码引发异常,表示我必须声明@Username,即使凭据包含属性
凭据。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..
发生在许多类型中,并通过它们显式列出解决了该问题


(DataContract/DataMember属性装饰是因为对象是WDSL接口的一部分-可能不相关,但保留在此处,以防它们因超出我知识范围的原因而相关。)

我的最佳猜测是Dapper只查看属性,而不查看字段。尝试将您的类更改为以下内容,看看是否有效

[DataContract]
public class Credentials
{
    [DataMember]
    public string Username {get; set;}
    [DataMember]
    public string PasswordMD5 {get; set;}
}

通常认为使用公共属性是更好的做法。

也许Dapper只适用于属性,而您有公共字段。这正是问题所在,谢谢@juharr7。为我懒惰的编程感到羞耻,非常感谢
publicstringusername{get;set;}
修复了这个问题,删除它们后又恢复了它。只是没有看到它。关于信息,这已经被记录,我计划修复它,因为结果对字段和属性都有效,但参数只对属性有效,这是不一致的。几周前我试图破解它,但它以一种糟糕的方式在我脸上爆炸了——我需要坐下来再试一次:(@Marc)这将是一种奢侈,我的懒惰行为真的不值得。
[DataContract]
public class Credentials
{
    [DataMember]
    public string Username;
    [DataMember]
    public string PasswordMD5;
}
[DataContract]
public class Credentials
{
    [DataMember]
    public string Username {get; set;}
    [DataMember]
    public string PasswordMD5 {get; set;}
}