NET CompactのPropertyInfo.SetValue()のArgumentException

.net c# compact-framework dapper dapper-lite


私は、 DapperのポートDapperLiteを使用して、Compact Frameworkで使用しています。 ArgumentExceptionを取得しましたSqlMapper.csファイルの指定された行に、以下のメソッドの情報がありません。


/// <summary>
    /// Populate a references type from an IDataRecord by matching column names to property names.
    /// </summary>
    private static void PopulateClass(object objectClass, IDataRecord reader)
        Type theType = objectClass.GetType();
        PropertyInfo[] p = theType.GetProperties();

        // Only set properties which match column names in the result.
        foreach (string columnName in GetColumnNames(reader))
            string colName = columnName;
            object value = reader[colName];
            PropertyInfo pi = p.FirstOrDefault(x => x.Name == colName);

            if (pi == null || value == DBNull.Value) continue;

            Type columnType = value.GetType();
            Type actualType = Nullable.GetUnderlyingType(pi.PropertyType) ?? pi.PropertyType;

            // Check for a directly assignable type
            if (actualType == columnType || actualType == typeof(string) || actualType == typeof(int))
                // Error generated here
                pi.SetValue(objectClass, value, null);
                value = actualType.GetMethod("Parse", new[] { typeof(string) }).Invoke(null, new[] { value });
                pi.SetValue(objectClass, value, null);

その時点の値は、 objectClass = Models.Employeeおよびvalue=1です。メソッドの上からのcolNameは、 Employeeモデルのint Idです。


namespace BioPadPunchClock.Models
    public class Employee
        public int Id { get; set; }
        public int CDB_Employee_PK { get; set; }  //Employee PK in the Central DB. If .null., new emp record on this timeclock needs to be pushed to the CDB.
        public string Name { get; set; }
        //public string FaceImage { get; set; }  //path to Jpeg image 136x90 pixels .\NAND\pictures\  named as <pk>.jpg
        public DateTime? BirthDate { get; set; }
        public string Status { get; set; }  //Full Time – Hourly, Inactive, Terminated, Part Time - Hourly  
        public DateTime? LastPunch { get; set; }
        public string LastPunchDirection { get; set; }  //IN or OUT
        public string PIN { get; set; }  // 4 digit
        public int CardNum { get; set; }  //HID Card Number
        public int CardFacCode { get; set; }  //HID Card Facility Code
        public string FpTemplate { get; set; }  //Fingerprint Template (registered fingerprint)
        public DateTime? LastUpdate { get; set; }  //When this employee record was last sync’d to the CDB. This value will match exactly in the LDB and CDB after a successful sync.
        public int DayTotal { get; set; } // Minutes cumulative for the current day at time of last punch
        public int PayPeriodTotal { get; set; } //Minutes cumulative for the current pay period at time of last punch
        public string Department { get; set; }
        public string SSN { get; set; }
        public bool ShouldPromptDept { get; set; } //Prompt employee to choose department each time


その時点で私のModel.Employeeを見てみると、 stringプロパティはすべて、赤い感嘆符でCould not evaluate expressionCould not evaluate expressionCould not evaluate expression 。これは単なる手掛かりですか?


これが問題なのかどうかは分かりませんが、コードをステップ実行して値を調べると、 actualType == Int32columnType==Int64評価されているのに対し、 value1です。




列の型がId列のInt64 columnType 、モデルのId列の型をInt64に変更すると、この問題が解決されます。

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ