我有这些课程:
public class Tournament
{
public int Id { get; set; }
public List<Prize> Prizes { get; set; }
...
}
public class Prize
{
public int Id { get; set; }
public int RankPosition { get; set; }
public Stuff PrizeStuff { get; set; }
}
public class Stuff
{
public int Id { get; set; }
public string Description{ get; set; }
public string StuffImagine { get; set; }
}
锦标赛课程可以列表形式获得多个奖项; 一个奖项与锦标赛相关,RanPosition为获胜者(设置为1),第二和第三。 STUFF是一个sql server表,其中注册了“ RankedPosition”在锦标赛中赢得的所有项目。
我的问题是填充对象STUFF,仅提供来自客户端的ID。
来自客户端的json是这样的:
{
"Name":"Test",
"Rule": "this is a rule",
"OtherProperty": "Just another property",
"PrizePool":
[
{
"RankPosition": "0",
"Prize":
{
"ID": 1
}
},
{
"RankPosition": "1",
"Prize":
{
"ID": 2
}
},
{
"RankPosition": "2",
"Prize":
{
"ID": 3
}
}
]
}
在这种情况下,我想使用上面的客户端JSON设置STUFF类的对象,并将STUFF对象保存到db。
如何从SOURCETOURNAMENT类到TORUNAMENT调用CreateMap方法 PRIZES列表可以从db映射内部对象STUFF?
源和目标PRIZES对象相同。
更新: 我尝试按照建议使用Automapper.Collection,但是我不知道该怎么做。 这是真实的代码:
// SOURCE
public class TournamentParameters
{
public string Name { get; set; }
public List<PremioGiocatore> Montepremi { get; set; }
... Other props
}
// DESTINATION
public class DataTournamentParameters
{
public string Name { get; set; }
public List<PremioGiocatore> Montepremi { get; set; }
... Other props
}
// Prize for the first & second in the tournament
public class PremioGiocatore
{
public int Id { get; set; }
public PosizioneClassifica PosizioneClassifica { get; set; }
public Premio Premio { get; set; }
}
// Registry of Prizes
public class Premio
{
public int Id { get; set; }
public string Descrizione { get; set; }
}
在Api的启动中,我具有映射器配置:
Mapper.Initialize((cfg) =>
{
cfg.AddCollectionMappers();
cfg.SetGeneratePropertyMaps<GenerateEntityFrameworkPrimaryKeyPropertyMaps<Contesto>>();
});
我尝试将源对象映射到目标一个:
public int Create(TournamentParameters info)
{
DataTournamentParameters dataInfo = _mapper.Map<TournamentParameters, DataTournamentParameters>(info);
...
}
由于“源”和“目的地”基本相等,所以我不知道如何创建地图以允许从仅具有上述ID的源开始填充我的“列表”目的地。