这个问题是因为在 AutoMapper 或 AutoMapper.Data 中,AddDataReaderMapping 方法现在需要提供一个 TypeMapConfiguration 对象。下面是一个示例:
using AutoMapper;
using AutoMapper.Configuration.Conventions;
using AutoMapper.Data;
using Dapper;
using System.Data.Common;
public class MyProfile : Profile
{
public MyProfile()
{
var mapperConfiguration = new MapperConfigurationExpression();
mapperConfiguration.AddDataReaderMapping();
CreateMap()
.ConvertUsing(r =>
{
var myType = new MyType();
myType.Id = r.GetInt32(r.GetOrdinal("Id"));
myType.Name = r.GetString(r.GetOrdinal("Name"));
return myType;
});
CreateMap()
.ConvertUsing(t => new[]
{
new SqlParameter("Id", t.Id),
new SqlParameter("Name", t.Name),
});
CreateMap()
.ForMember(x => x["Id"].Value, opt => opt.MapFrom(t => t.Id))
.ForMember(x => x["Name"].Value, opt => opt.MapFrom(t => t.Name));
Register(mapperConfiguration);
}
}
public class MyType
{
public int Id { get; set; }
public string Name { get; set; }
}
public static class Program
{
public static void Main()
{
var configuration = new ConfigurationBuilder()
.AddMaps(typeof(MyProfile).Assembly)
.AddMapperDataTypes()
.Build();
using (var connection = new NpgsqlConnection("Connection String"))
{
connection.Open();
var command = connection.CreateCommand();
command.CommandText = "SELECT * FROM MyTable;";
var reader = command.ExecuteReader();
while (reader.Read())
{
var myType = Mapper.Map(reader);
Console.WriteLine($"ID: {myType.Id}, Name: {myType.Name}");
}
}
}
}