【问题标题】:System.IndexOutOfRangeException and SqlQuery method with Interface or Base ClassSystem.IndexOutOfRangeException 和带有接口或基类的 SqlQuery 方法
【发布时间】:2021-08-09 06:08:36
【问题描述】:

我有一个未映射的属性,并在下面收到此错误。我尝试了一个基类和接口,但它一直在尝试将 SQL 结果映射到正在发送的类。我不想将这个类复制到另一个类,因为这个类有大量的属性,而且它的一个他们的名单。该接口没有“日期”属性。

System.IndexOutOfRangeException: '日期'

方法

public List<T> GetTest<T>(int testId) where T : IBaseTestComplex
{
    return DataContext.Database.SqlQuery<T>("EXEC [Test].[GetTest] @TestId",
        new SqlParameter("TestId", testId)).ToList();
}

来电者

var tests = testRepository.GetTest<TestComplex>(testId);

【问题讨论】:

  • 接口没有日期属性,但是接口的实现有吗?很好奇,因为我头脑中的这个错误映射到 ado.net 尝试从 db 获取结果中不存在的列的异常......即 reader["Date"]
  • 接口没有,但TestComplex类有。
  • 您能分享一下您目前是如何阻止该属性被映射的吗?
  • 我没有做任何特别的事情。我认为它只会映射属于接口或基类的属性,但 SqlQuery 函数并非如此。
  • 是的,sqlquery 函数会尝试对列匹配做一个属性,无论如何我也找不到忽略这一点。此外,它还会从您传递的泛型类型中获取属性,在这种情况下是 TestComplex,如果它具有返回的列的所有属性,则可以将其作为基类泛型输入

标签: c# .net sql-server entity-framework stored-procedures


【解决方案1】:

最后,我使用 SqlDateReader 来跳过每天抛出数十万次的异常。

            using (var connection = new SqlConnection(DataContext.Database.Connection.ConnectionString))
            {
                using (var cmd = new SqlCommand("[Test].[GetTest]", connection))
                {
                    var parameters = new List<SqlParameter>
                    {
                        new SqlParameter("TestId", GetDataValue(testId))
                    };

                    cmd.Parameters.AddRange(parameters.ToArray());

                    connection.Open();

                    cmd.CommandType = CommandType.StoredProcedure;
                    using (var dr = cmd.ExecuteReader())
                    {
                        if (dr.HasRows)
                        {
                            while (dr.Read())
                            {
                               games.Add(Get(dr));
                            }
                        }
                    }
                }
            }

【讨论】:

    猜你喜欢
    • 2011-09-21
    • 2013-05-08
    • 2021-10-11
    • 1970-01-01
    • 2016-12-27
    • 2011-06-03
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多