我正在使用CSV帮助器库将CSV数据映射到我的实体对象,然后使用实体在我的数据库中创建记录。
该地图非常适合新对象。在我有一个现有子对象的地方,它正在创建子对象,这导致实体中的键名重复。
我想根据位置ID是否存在或空来有条件地应用子成员地图的创建。
这将允许我的实体代码执行
public sealed class StopCsvMapper : ClassMap<Stop>
{
public StopCsvMapper()
{
Map(m => m.Id).Name("Id").Default(Guid.Empty);
Map(m => m.Identifier).Name("Identifier");
Map(m => m.Name).Name("Name");
Map(m => m.LocationId).Name("LocationId").Default(Guid.Empty);
References<StopLocationCsvMapper>(m => m.Location);
}
}
public class StopLocationCsvMapper : ClassMap<Location>
{
public StopLocationCsvMapper()
{
Map(m => m.Id).Name("LocationId").Default(Guid.Empty);
Map(m => m.Name).Name("LocationName");
Map(m => m.Notes).Name("LocationNotes");
Map(m => m.Latitude).Name("LocationLatitude");
Map(m => m.Longitude).Name("LocationLongitude");
}
}
答案 0 :(得分:0)
这应该仅在LocationId为空时有条件地创建子记录。
public sealed class StopCsvMapper : ClassMap<Stop>
{
public StopCsvMapper()
{
Map(m => m.Id).Name("Id").Default(Guid.Empty);
Map(m => m.Identifier).Name("Identifier");
Map(m => m.Name).Name("Name");
Map(m => m.Location).ConvertUsing(row =>
{
if (row.GetField("LocationId") != string.Empty)
{
return null;
}
else
{
return new Location
{
Id = Guid.Empty,
Name = row.GetField("LocationName"),
Notes = row.GetField("LocationNotes"),
Latitude = row.GetField("LocationLatitude"),
Longitude = row.GetField("LocationLongitude"),
};
}
});
}
}