Search code examples
c#entity-frameworkgenericsmodel

No mapping exists from object type System.collections.Generic.List


Error: System.ArgumentException occurred
  HResult=0x80070057
  Message=No mapping exists from object type System.Collections.Generic.List`1[[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] to a known managed provider native type.
  Source=<Cannot evaluate the exception source>
  StackTrace:
<Cannot evaluate the exception stack trace>
    public class PatInsuListItem : ErrorInfo
    {
        public int Insuspan_I { get; set; }
        public int Insu_Id { get; set; }
        public string Date_From { get; set; }
        public string Date_To { get; set; }
        public string Group_Name { get; set; }
        public string Short_Name { get; set; }
        public string Note { get; set; }
        public string Plan_Name { get; set; }
        public string Insur_num { get; set; }
        public string Touch_Date { get; set; }
        public string Touch_By { get; set; }
        public string InsuranceRankdescr { get; set; }
        public string COBFlag { get; set; }
        public string InsStatus { get; set; }
        public int Alert { get; set; }
        public string EndProcessIndicator { get; set; }
        public string LinkedAuthFlag { get; set; }
    }

    public class PatEFInsuList : ErrorInfo
    {
        public PatEFInsuList() {
            list = new List<PatInsuListItem>();
        }
        public List<PatInsuListItem> list ;
        public int Count { get; set; }
    }

 var _patlist = new PatEFInsuList();

            SqlParameter _count = new SqlParameter("@count", SqlDbType.Int) { Direction = System.Data.ParameterDirection.Output };

            IList<object> _paramList = new List<object>();
            _paramList.Add(new SqlParameter("@patientId", SqlDbType.Int) { Value = parms.PatientId });
            _paramList.Add(new SqlParameter("@orderBy", SqlDbType.VarChar) { Value = parms.OrderBy });
            _paramList.Add(new SqlParameter("@pageSize", SqlDbType.Int) { Value = parms.PageSize });
            _paramList.Add(new SqlParameter("@pageIndex", SqlDbType.Int) { Value = parms.PageIndex });
            _paramList.Add(new SqlParameter("@disallowedInsu", SqlDbType.VarChar) { Value = parms.DisallowedInsu });
            _paramList.Add(new SqlParameter("@initialId", SqlDbType.Int) { Value = parms.InitialId });
            _paramList.Add(new SqlParameter("@initialCOBFlag", SqlDbType.Bit) { Value = parms.InitialCOBFlag });
            _paramList.Add(_count);

            var _result = this.RepositoryContext.Database.SqlQuery<PatInsuListItem>("exec dbo.imc_Patient_RetrieveInsuranceCOBList  @patientId, @orderBy, @pageSize, @pageIndex, @disallowedInsu, @initialId, @initialCOBFlag, @count OUT", _paramList);

            _patlist.Count = _count.Value == null ? 0 : (int)_count.Value;
            _patlist.list = _result.Select(t => new PatInsuListItem
            {
                Insuspan_I = t.Insuspan_I,
                Insu_Id = t.Insu_Id,
                Date_From = t.Date_From,
                Date_To = t.Date_To,
                Group_Name = t.Group_Name,
                Short_Name = t.Short_Name,
                Note = t.Note,
                Plan_Name = t.Plan_Name,
                Insur_num = t.Insur_num,
                Touch_Date = t.Touch_Date,
                Touch_By = t.Touch_By,
                InsuranceRankdescr = t.InsuranceRankdescr,
                COBFlag = t.COBFlag,
                InsStatus = t.InsStatus,
                Alert = t.Alert,
                EndProcessIndicator = t.EndProcessIndicator,
                LinkedAuthFlag = t.LinkedAuthFlag
            }).ToList();

            return _patlist;

Error is occurring on the 'ToList' line during runtime. The code compiles ok. The models have a list in it, so Im not sure why the error is happening.


Solution

  • Your problem is here:

    IList<object> _paramList = new List<object>();
    

    You can't pass in a List<object>.

    Try this instead:

    var _result = this.RepositoryContext.Database.SqlQuery<PatInsuListItem>(
        "exec dbo.imc_Patient_RetrieveInsuranceCOBList  @patientId, @orderBy, @pageSize, @pageIndex, @disallowedInsu, @initialId, @initialCOBFlag, @count OUT", 
        new SqlParameter("@patientId"     , SqlDbType.Int    ) { Value = parms.PatientId },
        new SqlParameter("@orderBy"       , SqlDbType.VarChar) { Value = parms.OrderBy },
        new SqlParameter("@pageSize"      , SqlDbType.Int    ) { Value = parms.PageSize },
        new SqlParameter("@pageIndex"     , SqlDbType.Int    ) { Value = parms.PageIndex },
        new SqlParameter("@disallowedInsu", SqlDbType.VarChar) { Value = parms.DisallowedInsu },
        new SqlParameter("@initialId"     , SqlDbType.Int    ) { Value = parms.InitialId },
        new SqlParameter("@initialCOBFlag", SqlDbType.Bit    ) { Value = parms.InitialCOBFlag },
        new SqlParameter("@count"         , SqlDbType.Int    ) { Value = _count } // this one you attempted to pass in just the int, not a SqlParameter
    );
    

    OR

    You could alternatively call .ToArray() on your previous _paramList:

    var _result = this.RepositoryContext.Database.SqlQuery<PatInsuListItem>(
        "exec dbo.imc_Patient_RetrieveInsuranceCOBList  @patientId, @orderBy, @pageSize, @pageIndex, @disallowedInsu, @initialId, @initialCOBFlag, @count OUT",
        _paramList.ToArray());