2017-06-23 3 views
-2

Erreur: System.ArgumentException a eu lieu HResult = 0x80070057 message = Aucun mappage existe à partir du type d'objet System.Collections.Generic.List`1 [[System.Object, mscorlib, Version = 4.0.0.0, Culture = neutre, PublicKeyToken = b77a5c561934e089]] à un type natif de fournisseur géré connu. Source = StackTrace: Aucun mappage existe à partir du type d'objet System.Collections.Generic.List

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; 

Une erreur se produit sur la ligne 'ToList' pendant l'exécution. Le code compile bien. Les modèles ont une liste, donc je ne sais pas pourquoi l'erreur se produit.

+0

double possible de https://stackoverflow.com/questions/9149919/no-mapping-exists-from-object-type-system-collections-generic-list-when-executin – user5226582

+0

Copie possible de [Aucun mappage n'existe à partir du type d'objet System.Collections.Generic.List lors de l'exécution de proc stocké avec les paramètres dans EF 4.3] (https://stackoverflow.com/questions/9149919/no-mapping-exists-from-object -type-system-collections-generic-list-when-executin) –

Répondre

0

Votre problème est ici:

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

Vous ne pouvez pas passer dans un List<object>

Essayez ceci:

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

OU

Vous pouvez appeler alternativement .ToArray() sur votre précédente _paramList:

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

Sweet. J'ai utilisé votre deuxième option et j'ai dépassé ce problème. Maintenant, j'ai un problème avec mes champs de date. La distribution spécifiée d'un type 'System.DateTime' matérialisé au type 'System.String' n'est pas valide ' –

+0

C'est un problème distinct à votre message original – Alex

+0

oui..J'ai découvert que ma classe avait une chaîne alors que le sproc était renvoyant datetime. Cela a été corrigé depuis. Merci. –