.net - AutoMapper将IEnumerable映射到DataReader问题

标签 .net automapper

我正在使用AutoMapper来使用下面讨论的代码将数据读取到DataReader
http://elegantcode.com/2009/10/16/mapping-from-idatareaderidatarecord-with-automapper/

我看到它非常脆弱...而且变幻莫测。

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

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

最佳答案

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

就我而言,我有一个SQL Server表,其中的ID字段为INT类型。该值已映射到具有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());
    }
}

关于.net - AutoMapper将IEnumerable映射到DataReader问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2429194/

相关文章:

.net - 将 SPA 中的 cookie 身份验证升级到 .NET Core 2.0

c# - 为使用 SSH.NET SshClient.RunCommand 执行的命令 (cli) 提供输入/子命令

.net - 我在哪里可以找到这个 .NET WinForms 控件(如果存在)?

c# - 使用 Moq 模拟 AutoMapper Mapper.Map 调用

c# - 尝试从 int 映射时出现无效的转换异常?枚举?

asp.net-core - 如何在 AutoMapper 配置文件类中注入(inject)服务

c# - 如何以及在何处在 WPF 应用程序中实现自动映射器

java - 如何将 Java 后端与 .NET 前端连接

c# - 在 Automapper 中映射时忽略导航属性

c# - 使用 SystemEvents.UserPreferenceChanged 和多个 UI 线程时 UI 卡住