Closed fara-ru251 closed 2 years ago
It would be really helpful if you provide a bit more context. By that i mean, the class you are trying to map + the specific query?
var query = @"SELECT
*
FROM
TABLE1 T1
JOIN TABLE2 T2 ON T2.FIELD2= T1.FIELD1"; // query used to retrieve data from DB (here I use * (asterisk))
Func<DbConnection, IList<TABLE1MODEL>> tableFunc = new Func<DbConnection, IList<TABLE1MODEL>>((conn) =>
{
return conn.QuerySql<TABLE1MODEL>(query); // model used to map, appears below "TABLE1MODEL"
});
List<TABLE1MODEL> table1List = null;
using (var conn = this._database.Open())
{
table1List = tableFunc(conn).ToList(); // <= here exception is thrown
}
the model I used to map from database tables
public class TABLE1MODEL
{
public string FIELD1 { get; set; }
public string FIELD2 { get; set; }
public string FIELD3 { get; set; }
public int FIELD4 { get; set; }
public string FIELD5 { get; set; }
public DateTime FIELD6 { get; set; }
public int FIELD7 { get; set; }
public int FIELD8 { get; set; }
public string FIELD9 { get; set; }
public string FIELD10 { get; set; }
public int FIELD11 { get; set; }
public string FIELD12 { get; set; }
public string FIELD13 { get; set; }
public string FIELD14 { get; set; }
public string FIELD15 { get; set; }
public string FIELD16 { get; set; }
public string FIELD17 { get; set; }
public string FIELD18 { get; set; }
public string FIELD19 { get; set; }
public string FIELD20 { get; set; }
public string FIELD21 { get; set; }
public string FIELD22 { get; set; }
public string FIELD23 { get; set; }
public string FIELD24 { get; set; }
protected string SOME_FIELD_NOT_EXISTINDB1 { get; set; }
public int SOME_FIELD_NOT_EXISTINDB2 { get; set; }
public int SOME_FIELD_NOT_EXISTINDB3 { get; set; }
public string FIELD25 { get; set; }
public string FIELD26 { get; set; }
public int FIELD27 { get; set; }
public int FIELD28 { get; set; }
public long FIELD29 { get; set; }
public string FIELD30 { get; set; }
public List<OtherModel> SOME_FIELD_NOT_EXISTINDB4 { get; set; }
}
TABLE1 table schema looks like this TABLE2 table schema as below
Here when selecting joined results if our column names is repeating in both tables we have duplicated columns eg. (FIELD1, FIELD1_1), is this may a problem ? May be library has errors in mapping columns when they differ somehow (in count)?
Looking at your stack trace:
Stack Trace is below:
at Oracle.ManagedDataAccess.Client.OracleDataReader.RetrieveSchemaTable(DataTable& dataTable, Boolean isFromEx)
at Oracle.ManagedDataAccess.Client.OracleDataReader.GetSchemaTableCopy(DataTable& dataTable, Boolean isFromEx)
at Oracle.ManagedDataAccess.Client.OracleDataReader.GetSchemaTable()
The exception is thrown in the oracle driver, not in Insight.Database. The call to GetSchemaTable()
is pretty simple so I don't think it's an issue with Insight.
I'd recommend updating the OracleManagedDataAccess library.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
Hello to All, today I faced the problem "Index was outside the bounds of the array". Stack Trace is below: at Oracle.ManagedDataAccess.Client.OracleDataReader.RetrieveSchemaTable(DataTable& dataTable, Boolean isFromEx) at Oracle.ManagedDataAccess.Client.OracleDataReader.GetSchemaTableCopy(DataTable& dataTable, Boolean isFromEx) at Oracle.ManagedDataAccess.Client.OracleDataReader.GetSchemaTable() at Insight.Database.Providers.OracleManaged.OracleInsightDbProvider.IsXmlColumn(IDataReader reader, Int32 index) at Insight.Database.DbSerializationRule.GetSerializer(IDataReader reader, Int32 column, ClassPropInfo prop) at Insight.Database.ColumnMapping.MapColumn(Type type, IDataReader reader, Int32 column, IColumnMapper overrideMapping) at Insight.Database.ColumnMapping.<>cDisplayClass13_0.b0(Int32 i)
at System.Linq.Enumerable.SelectRangeIteratorb 0(SchemaMappingIdentity key)
at System.Collections.Concurrent.ConcurrentDictionaryb__1(IDbCommand cmd, IDataReader r)
at Insight.Database.DBConnectionExtensions.ExecuteAndAutoClose[T](IDbConnection connection, Func
1.ToArray() at Insight.Database.ColumnMapping.MapColumns(Type type, IDataReader reader, Int32 startColumn, Nullable
1 columnCount, IColumnMapper overrideMapping) at Insight.Database.CodeGenerator.ClassDeserializerGenerator.MapColumns(Type type, IDataReader reader, Int32 startColumn, Int32 columnCount, IRecordStructure structure, Boolean allowBindChild) at Insight.Database.CodeGenerator.ClassDeserializerGenerator.CreateClassDeserializerDynamicMethod(Type type, IDataReader reader, IRecordStructure structure, Int32 startColumn, Int32 columnCount, Boolean createNewObject, Boolean isRootObject, Boolean allowBindChild, Boolean checkForAllDbNull) at Insight.Database.CodeGenerator.ClassDeserializerGenerator.CreateClassDeserializer(Type type, IDataReader reader, IRecordStructure structure, Int32 startColumn, Int32 columnCount, Boolean createNewObject) at Insight.Database.CodeGenerator.ClassDeserializerGenerator.CreateDeserializer(IDataReader reader, Type type, IRecordStructure structure, SchemaMappingType mappingType) at Insight.Database.CodeGenerator.DbReaderDeserializer.<>cDisplayClass8_0.2.GetOrAdd(TKey key, Func
2 valueFactory) at Insight.Database.CodeGenerator.DbReaderDeserializer.GetDeserializer(IDataReader reader, Type type, IRecordStructure structure, SchemaMappingType mappingType) at Insight.Database.CodeGenerator.DbReaderDeserializer.GetDeserializer[T](IDataReader reader, IRecordStructure structure) at Insight.Database.DBReaderExtensions.AsEnumerable[T](IDataReader reader, IRecordReader1 recordReader)+MoveNext() at System.Collections.Generic.List
1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 source) at Insight.Database.Structure.ListReader1.Read(IDbCommand command, IDataReader reader) at Insight.Database.DBConnectionExtensions.<>c__DisplayClass178_0
1.2 getCommand, Func
3 translate, CommandBehavior commandBehavior) at Insight.Database.DBConnectionExtensions.QuerySql[T1](IDbConnection connection, String sql, Object parameters, CommandBehavior commandBehavior, Nullable`1 commandTimeout, IDbTransaction transaction, Object outputParameters)The service is running as a BackgroundService worker and constanlty runs without restarting. I tried to reproduce the error, but after restarting service all was fine. Some idea about why this is happened is a cache of table schema saved on service. A day before I added new column to the table from the data was fetched. Another idea is: when I fetching columns from table I used an (asterisk) [SELECT FROM TABLE1 T1 JOIN TABLE2 T1 ON T1.COL1 = T2.COL2], may be problems with mapping table column to POCO object.
Thanks in advance!