【问题标题】:How to map a collection using CSV Helper如何使用 CSV Helper 映射集合
【发布时间】:2016-08-08 15:28:20
【问题描述】:
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 从模板映射 如何映射 csv 类?

【问题讨论】:

    标签: c# entity-framework csvhelper


    【解决方案1】:

    目前这是不可能的。您需要手动处理集合。如果您想将所有内容保存在映射文件中,一种方法是使用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;
            });
        }
    }
    

    【讨论】:

    • 我有一个实体框架架构,需要将单个csv中的数据上传到多个表中。我该怎么做?
    • 你看过文档吗? joshclose.github.io/CsvHelper
    • 也在这里搜索问题。这个问题已经以多种方式多次回答。 github.com/JoshClose/CsvHelper/issues
    • 是的,我查看了它声明使用 convert using 的文档,但我不确定如何使用它,因为在上面的示例中,templateitem 是一个集合,我如何将它映射到特定列csv
    • 我添加了一个如何使用ConvertUsing 映射List 的示例。
    猜你喜欢
    • 2021-08-16
    • 2015-03-18
    • 2010-09-07
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    相关资源
    最近更新 更多