gpt4 book ai didi

c# - 使用 AutoMapper 将 DataRow 转换为对象

转载 作者:太空狗 更新时间:2023-10-29 22:32:08 24 4
gpt4 key购买 nike

我可以成功地从 IDataReader 映射到一个对象列表,但是当我想获取一个 DataRow 时,它似乎没有按预期工作。

我是不是漏掉了一些简单的东西?

[TestFixture]
public class AutomapperTest
{
[Test]
public void TestMethod1()
{
DataTable dt = new DataTable("contact");
dt.Columns.Add("FirstName");
dt.Columns.Add("LastName");
dt.Columns.Add("Line1");
dt.Columns.Add("Line2");
dt.Columns.Add("Line3");
dt.Columns.Add("Suburb");
dt.Columns.Add("State");
dt.Columns.Add("Postcode");

DataRow row = dt.NewRow();
row.ItemArray = new [] { "Little", "Johnny",
"1 Random Place", "", "",
"Windsor", "Qld", "4030" };

var dest = Mapper.DynamicMap<myObject>(row);

Assert.AreEqual(row["FirstName"], "Little");
Assert.IsNotNull(dest);
Assert.AreEqual(dest.FirstName, "Little");
}
}

目的地类型:

public class myObject
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Line1 { get; set; }
public string Line2 { get; set; }
public string Line3 { get; set; }
public string Suburb { get; set; }
public string State { get; set; }
public string Postcode { get; set; }
}

最佳答案

您必须实现自己的自定义值解析器

https://github.com/AutoMapper/AutoMapper/wiki/Custom-value-resolvers

更新

public class CustomResolver : IValueResolver
{
public ResolutionResult Resolve(ResolutionResult source)
{
return source.New( Convert.ChangeType((source.Context.SourceValue as DataRow)[source.Context.MemberName], source.Context.DestinationType));
}
}

下面是使用方法

Mapper.CreateMap<DataRow,myObject>().ForAllMembers(m=>m.ResolveUsing<CustomResolver>());
var dest = Mapper.Map<myObject>(row);

我推荐使用 Dapper。这样,来自数据库的数据将是强类型或动态的,并且 Automapper 应该能够找出映射。

我相信 Dapper 可以通过 ODBC 读取 CSV 文件。但对于 CSV,我建议改用 LinqToCSV Nuget 包。

关于c# - 使用 AutoMapper 将 DataRow 转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24665660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com