CsvHelper fluent class 映射 ConstructUsing() 在引用地图中被忽略了吗?
CsvHelper fluent class mapping ConstructUsing() ignored in referenced maps?
我想知道我这样做是否正确,但我正在使用 CsvHelper 并定义了以下流畅的 class 映射:
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));
}
}
这些 class 映射旨在能够以不特定顺序将动态列名称映射到我的类型 WasteEstimationGenericDay
,但是问题是在将值映射到我需要指定的类型之前这些值的单位,这就是为什么在每个 class 映射中指定 ConstructUsing()
以在映射类型的构造期间设置单位。
然而,对于 属性 WasteEstimationGenericDay.Quality, the
ConstructUsing()` 语句中类型 WasteStreamQuality
的引用 class 映射,永远不会调用,也不会指定单位。有谁知道我的映射配置是否有问题?或者这是 CsvHelper 中的 bug/limitation?
我也试过在配置上分别注册两个 class 地图,如下所示:
csvReaderConfig.RegisterClassMap(new WasteEstimationGenericDayCsvMap(dayModel));
csvReaderConfig.RegisterClassMap(new WasteStreamQualityCsvMap(dayModel.Quality));
但它似乎没有任何影响,除非它是调用 CsvReader.GetRecords<T>()
时指定的类型。
感谢您的帮助。
将此问题作为 issue 发布后,我得到了以下回复:
Taking a quick look at the source (as I don't have a computer to test it on at the moment), it looks like that isn't implemented, but should be a pretty quick thing to do.
我想知道我这样做是否正确,但我正在使用 CsvHelper 并定义了以下流畅的 class 映射:
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));
}
}
这些 class 映射旨在能够以不特定顺序将动态列名称映射到我的类型 WasteEstimationGenericDay
,但是问题是在将值映射到我需要指定的类型之前这些值的单位,这就是为什么在每个 class 映射中指定 ConstructUsing()
以在映射类型的构造期间设置单位。
然而,对于 属性 WasteEstimationGenericDay.Quality, the
ConstructUsing()` 语句中类型 WasteStreamQuality
的引用 class 映射,永远不会调用,也不会指定单位。有谁知道我的映射配置是否有问题?或者这是 CsvHelper 中的 bug/limitation?
我也试过在配置上分别注册两个 class 地图,如下所示:
csvReaderConfig.RegisterClassMap(new WasteEstimationGenericDayCsvMap(dayModel));
csvReaderConfig.RegisterClassMap(new WasteStreamQualityCsvMap(dayModel.Quality));
但它似乎没有任何影响,除非它是调用 CsvReader.GetRecords<T>()
时指定的类型。
感谢您的帮助。
将此问题作为 issue 发布后,我得到了以下回复:
Taking a quick look at the source (as I don't have a computer to test it on at the moment), it looks like that isn't implemented, but should be a pretty quick thing to do.