1

具体来说,我正在尝试用这个 '00010600-0000-0000-0000-000000000000' 值作为我班级中的 Id 检索一行。

我尝试使用 ado 检索要检查的列,它会适当地返回值,但是当我尝试使用 Select() 或 GetByIdOrDefault(id) 时,我的对象返回的所有其他值都正确填充,但出现的 Id 字段除外回来作为一个空向导。

Id 列设置为表的主键。

编辑:

[Test]
public void Test() {
    var dbFactory = new OrmLiteConnectionFactory(_configuration.ConnectionString);

    using (var conn = dbFactory.OpenDbConnection()) {
        var nodes = conn.Select<TreeNode>();
        foreach (var node in nodes) {
            Console.WriteLine(node.Id);
        }
    }
}

此测试复制了我遇到的问题。我遇到问题的一些Guid是:

  • 00010600-0000-0000-0000-000000000000
  • 00010100-0000-0000-0000-000000000000
  • 00000300-0000-0000-0000-000000000000
4

1 回答 1

1

问题与作为对象中的枚举的字段有关,并且该字段的值使用空格设置错误并且无法映射回枚举。这导致该行的所有其他映射失败。

public static T PopulateWithSqlReader<T>(this T objWithProperties, IDataReader dataReader, FieldDefinition[] fieldDefs, Dictionary<string, int> indexCache)
{
    try
    {
        foreach (var fieldDef in fieldDefs)
        {
            int index;
            if (indexCache != null)
            {
                if (!indexCache.TryGetValue(fieldDef.Name, out index))
                {
                    index = dataReader.GetColumnIndex(fieldDef.FieldName);
                    if (index == NotFound)
                    {
                        index = TryGuessColumnIndex(fieldDef.FieldName, dataReader);
                    }

                    indexCache.Add(fieldDef.Name, index);
                }
            }
            else
            {
                index = dataReader.GetColumnIndex(fieldDef.FieldName);
                if (index == NotFound)
                {
                    index = TryGuessColumnIndex(fieldDef.FieldName, dataReader);
                }
            }

            if (index == NotFound) continue;
            var value = dataReader.GetValue(index);
            fieldDef.SetValue(objWithProperties, value);
        }
    }
    catch (Exception ex)
    {
        Log.Error(ex);
    } 
    return objWithProperties;
}

上面方法中的 try/catch 解决了这个问题,除非打开了日志记录(应该是,我的错),这个问题不会被注意到。

于 2013-10-09T02:05:42.563 回答