对象类型System.collections.Generic.List中不存在任何映射

时间:2017-06-23 13:30:05

标签: c# entity-framework generics models

错误:发生了System.ArgumentException   的HResult = 80070057   Message =没有从对象类型System.Collections.Generic.List`1 [[System.Object,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]到已知托管提供程序本机类型的映射。   来源=   堆栈跟踪:

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;

运行时期间'ToList'行发生错误。代码编译好了。模型中有一个列表,所以我不确定错误发生的原因。

1 个答案:

答案 0 :(得分:1)

你的问题在这里:

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

您无法通过List<object>

请改为尝试:

    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
    );

您也可以在之前的.ToArray()上致电_paramList

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