NET Compact에서 PropertyInfo.SetValue ()에 대한 ArgumentException

.net c# compact-framework dapper dapper-lite

문제

Compact Framework에서 사용할 DapperLite , Dapper 포트를 사용하고 있습니다. ArgumentExceptionSqlMapper.cs 합니다. 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);
            }
            else
            {
                value = actualType.GetMethod("Parse", new[] { typeof(string) }).Invoke(null, new[] { value });
                pi.SetValue(objectClass, value, null);
            }
        }
    }

그 시점의 값은 objectClass = Models.Employeevalue=1 입니다. Method에서 더 위로 향하는 colNameEmployee 모델의 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 expression 합니다. 이것은 단서입니까 아니면 정상입니까?


추가 조사 결과 ...

이 문제가 아닌지는 잘 모르겠지만 코드를 단계별로 actualType == Int32columnType==Int64 라는 value 하면서 value 하는 동안 value1 입니다.

actualType.Equals(typeof(int)) 가 있기 때문에 어떤 차이가 있는지 확신 할 수 없지만이를 언급했습니다.

수락 된 답변

우리는 마지막 정보를 가지고 GitHub에서 이것을 알아 냈습니다.

columnTypeId 열의 Int64 이므로 모델의 Id 열 유형을 Int64 하면이 문제가 해결됩니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.