C# CsvHelper:初始化映射成员
想象一组EF数据库集,如下所示:C# CsvHelper:初始化映射成员,c#,entity-framework,csvhelper,C#,Entity Framework,Csvhelper,想象一组EF数据库集,如下所示: public class Employee { ... public string FirstName { get; set; } public List<Badge> Badge { get; set; } } public class Badge { public long CSN { get; set; } public int EmployeeId { get; set; } public int Type { g
public class Employee {
...
public string FirstName { get; set; }
public List<Badge> Badge { get; set; }
}
public class Badge {
public long CSN { get; set; }
public int EmployeeId { get; set; }
public int Type { get; set; }
}
FIRSTNAME;CSN;TYPE
Jerome;12345;1
我使用了CollectionGenericConverter,用新记录初始化列表
Map(m => m.Firstname).Name("Firstname");
Map(m => m.Badges).Name("CSN").TypeConverter<BadgeConverter>();
...
public class BadgeConverter : CollectionGenericConverter {
public override object ConvertFromString(String text, IReaderRow row, MemberMapData memberMapData) {
return new List<Badge> {
new Badge {
CSN = Convert.ToInt16(text)
}
};
}
}
如何做到这一点?像这样的东西可能适合你
公共类程序
{
公共静态void Main(字符串[]args)
{
使用(MemoryStream stream=new MemoryStream())
使用(StreamWriter=新StreamWriter(流))
使用(StreamReader=新StreamReader(stream))
使用(CsvReader csv=新CsvReader(读卡器))
{
writer.WriteLine(“FIRSTNAME;CSN;TYPE”);
作者:WriteLine(“Jerome;12345;1”);
writer.Flush();
流位置=0;
csv.Configuration.Delimiter=“;”;
csv.Configuration.RegisterClassMap();
var records=csv.GetRecords().ToList();
}
}
}
公营雇员
{
公共字符串名{get;set;}
公共列表标记{get;set;}
}
公众阶级徽章
{
公共长CSN{get;set;}
public int EmployeeId{get;set;}
公共int类型{get;set;}
}
公共类EmployeeMap:ClassMap
{
公共雇员地图()
{
Map(m=>m.FirstName).Name(“FirstName”);
映射(m=>m.Badge).ConvertUsing(行=>
{
变量列表=新列表
{
新徽章{CSN=row.GetField(“CSN”),Type=row.GetField(“Type”)},
};
退货清单;
});
}
}
完美!谢谢大卫
Map(m => m.Badges).Name("Type").TypeConverter<AnotherOneBadgeConverter>();
Map(m => m.Badges[0].Type).Name("Type");