CsvHelper fluent class mapping ConstructUsing() 在引用的映射中被忽略

本文关键字:映射 引用 class fluent mapping ConstructUsing CsvHelper | 更新日期: 2023-09-27 18:31:23

>我想知道我是否做对了,但我正在使用 CsvHelper 并定义了以畅的类映射:

        internal class WasteEstimationGenericDayCsvMap : CsvClassMap<WasteEstimationGenericDay>
        {
            public WasteEstimationGenericDayCsvMap(WasteEstimationGenericDay dayModel)
            {
                var qualityModel = dayModel.Quality;
                ConstructUsing(() => new WasteEstimationGenericDay(dayModel.ModelUnitContext));
                Map(m => m.InflowVolume).Name(dayModel.GetPropertyDisplayName(() => dayModel.InflowVolume));
                References<WasteStreamQualityCsvMap>(m => m.Quality, qualityModel);
            }
        }
        internal class WasteStreamQualityCsvMap : CsvClassMap<WasteStreamQuality>
        {
            public WasteStreamQualityCsvMap(WasteStreamQuality qualityModel)
            {
                ConstructUsing(() => new WasteStreamQuality(qualityModel.ModelUnitContext));
                Map(m => m.TotalNitrogen).Name(qualityModel.GetPropertyDisplayName(() => qualityModel.TotalNitrogen));
                Map(m => m.TotalPhosphorus).Name(qualityModel.GetPropertyDisplayName(() => qualityModel.TotalPhosphorus));
                Map(m => m.TotalDissolvedSalts).Name(qualityModel.GetPropertyDisplayName(() => qualityModel.TotalDissolvedSalts));
                Map(m => m.VolatileSolids).Name(qualityModel.GetPropertyDisplayName(() => qualityModel.VolatileSolids));
                Map(m => m.TotalSolids).Name(qualityModel.GetPropertyDisplayName(() => qualityModel.TotalSolids));
                Map(m => m.ElectricalConductivity).Name(qualityModel.GetPropertyDisplayName(() => qualityModel.ElectricalConductivity));
            }
        }

这些类映射旨在能够以没有特定顺序将动态列名映射到我的类型WasteEstimationGenericDay,但是问题是在将值映射到类型之前,我需要指定这些值所在的单位,这就是为什么在每个类映射中指定ConstructUsing()以在构造映射类型期间设置单位。

但是,对于属性WasteEstimationGenericDay.Quality, the上类型WasteStreamQuality的引用类映射,永远不会调用 ConstructUsing()' 语句,也不会指定单位。有谁知道我的映射配置是否做错了什么?或者这是 CsvHelper 中的错误/限制?

我还尝试在配置上分别注册两个类映射,如下所示:

      csvReaderConfig.RegisterClassMap(new WasteEstimationGenericDayCsvMap(dayModel));
      csvReaderConfig.RegisterClassMap(new WasteStreamQualityCsvMap(dayModel.Quality));

但它似乎没有任何影响,除非它是调用 CsvReader.GetRecords<T>() 时指定的类型。

感谢您的任何帮助。

CsvHelper fluent class mapping ConstructUsing() 在引用的映射中被忽略

在将此问题作为问题发布后,我得到了以下回复:

快速浏览一下源代码(因为我目前没有计算机进行测试),看起来没有实现,但应该是一件非常快的事情。