【问题标题】:AutoMapper Mapping IEnumerable to DataReader IssueAutoMapper 将 IEnumerable 映射到 DataReader 问题
【发布时间】:2010-03-11 22:26:59
【问题描述】:

我正在使用 AutoMapper 到 datareader 使用下面讨论的代码 http://elegantcode.com/2009/10/16/mapping-from-idatareaderidatarecord-with-automapper/

我认为它非常不稳定......而且不可预测。

1) 具有相同数据读取器的相同代码有时会将值带回 dto 结果集,有时则不会。 2) 我有一个来自数据库的 ID 值为 100、200。当它映射到整数类型的 DTO 时,这个 100 会更改为一个较大的值(如 234343211)。

关于我为什么会看到这种不一致的任何想法。我应该使用标准吗 而(reader.Read())?并停止使用自动映射器?

【问题讨论】:

  • 嗯...很奇怪...您可以给我发送一些示例数据和演示该问题的示例源对象吗?这应该可以帮助我缩小范围。谢谢!

标签: .net automapper


【解决方案1】:

我遇到了同样的问题。当您的源类型和目标类型不完全相同时,似乎会发生这种情况。

在我的例子中,我有一个带有 INT 类型 ID 字段的 SQL Server 表。该值被映射到具有 long (Int64) 类型的属性的类。这将导致预期值 100 映射到类似 668386727769314912 的值。更改表架构以使 ID 为 BIGINT 后,这些值始终正确映射。

我建议仔细查看源类型和目标类型,以确保它们完全相同。显然,您希望隐式工作的转换(如 Int32 到 Int64)可能会导致问题。

这是一个重现问题的示例:

public class DataMapperIssue
{
    public class Person
    {
        public long id { get; set; }
        public string first_name { get; set; }
        public string last_name { get; set; }
    }

    public static void run()
    {
        var table = new DataTable();

        table.Columns.Add("id", typeof(int));
        table.Columns.Add("first_name", typeof(string));
        table.Columns.Add("last_name", typeof(string));

        table.Rows.Add(100, "Jeff", "Barnes");
        table.Rows.Add(101, "George", "Costanza");
        table.Rows.Add(102, "Stewie", "Griffin");
        table.Rows.Add(103, "Stan", "Marsh");
        table.Rows.Add(104, "Eric", "Cartman");

        AutoMapper.Mapper.Reset();
        AutoMapper.Mapper.CreateMap<IDataReader, Person>();

        var results = AutoMapper.Mapper.Map<IDataReader, IList<Person>>(table.CreateDataReader());
    }
}

【讨论】:

  • 你用的是什么版本的自动映射器?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多