public class Template : Entity
{
public Template()
{
TemplateItems = new List<TemplateItem>();
}
public int id { get; set; }
public string name { get; set; }
public virtual ICollection<TemplateItem> TemplateItems { get; set; }
}
public class TemplateItem : Entity
{
public int id { get; set; }
public int templateId { get; set; }
public string name { get; set; }
public virtual Template Template { get; set; }
}
public sealed class TemplateMap : CsvClassMap<Template>
{
public TemplateMap()
{
Map(m => m.name).Name("name");
//Map(m => m.TemplateItems).ConvertUsing(row => new List<string> { row("nodeType") });
// How to map a collection value to csv column
}
}
我正在读取CSV文件,需要将csv列映射到两个不同的表 我有两种不同的表格模型 即模板和templateitem templateitem从模板映射 如何映射csv类?
答案 0 :(得分:2)
目前这是不可能的。您需要手动处理集合。一种方法是使用ConvertUsing
,如果你想将所有内容保存在映射文件中。
以下是一个例子:
void Main()
{
using (var stream = new MemoryStream())
using (var writer = new StreamWriter(stream))
using (var reader = new StreamReader(stream))
using (var csv = new CsvReader(reader))
{
writer.WriteLine("1,a,b,c");
writer.WriteLine("2,d,e,f");
writer.Flush();
stream.Position = 0;
csv.Configuration.HasHeaderRecord = false;
csv.Configuration.RegisterClassMap<TestMap>();
csv.GetRecords<Test>().Dump();
}
}
public class Test
{
public int Id { get; set; }
public List<string> Names { get; set; }
}
public class TestMap : CsvClassMap<Test>
{
public TestMap()
{
Map(m => m.Id);
Map(m => m.Names).ConvertUsing(row =>
{
var list = new List<string>();
list.Add(row.GetField( 1 ));
list.Add(row.GetField( 2 ));
list.Add(row.GetField( 3 ));
return list;
});
}
}