0

one を使用してデータを取得しようとしていますGetData。このビジネス メソッドは、このアクション メソッドのサービス レイヤーを介してコントローラーから呼び出されます。

public PartialViewResult Grid()
{
    var model = new DomainModels.Reports.MeanData();
    using (var reportsClient = new ReportsClient())
    {
        model = reportsClient.GetData(reportType, toDate, fromDate); //<= error on this line
    }
    return PartialView("_Grid", model);
}

次のエラーが表示されます。

System.Collections.Generic.List<BusinessService.Report.MeanData>タイプ ' ' を ' ' にDomainModels.Reports.MeanData暗黙的に変換することはできません

同僚が Automapper を使用することを提案していたので、私は彼のために働いたものに基づいて、次のようにアクション メソッドを変更しました。

public PartialViewResult Grid()
{
    using (var reportsClient = new ReportsClient())
    {
        Mapper.CreateMap<DomainModels.Reports.MeanData, BusinessService.Report.MeanData>();
        var model = reportsClient.GetData(reportType, toDate, fromDate); 
        DomainModels.Reports.MeanData viewModel = //<= error on this line
            Mapper.Map<DomainModels.Reports.MeanData, BusinessService.Report.MeanData>(model);
    }
    return PartialView("_Grid", viewModel);
}

次のエラーが表示されます。

AutoMapper.Mapper.Map<DomainModels.Reports.MeanData,BusinessService.Report.MeanData>「 (DomainModels.Reports.MeanData)」に最適なオーバーロードされたメソッドの一致には、無効な引数が含まれています

DomainModel エンティティ:

[DataContract]
public class MeanData
{
    [DataMember]
    public string Description { get; set; }
    [DataMember]
    public string Month3Value { get; set; }
    [DataMember]
    public string Month2Value { get; set; }
    [DataMember]
    public string Month1Value { get; set; }
}

生成された にある BusinessService エンティティにはreference.cs、DomainModel エンティティと同じ名前のプロパティがあります。

両方のインスタンスで何が間違っていますか?

4

1 に答える 1

1

レポート クライアントがビジネス エンティティのリストを返し、それらを単一のエンティティにマップしようとしています。ビジネス エンティティのコレクションをビュー モデルのコレクションにマップする必要があると思います (現在、コレクションを単一のビュー モデルにマップしようとしています)。

using (var reportsClient = new ReportsClient())
{
    List<BusinessService.Report.MeanData> model = 
        reportsClient.GetData(reportType, toDate, fromDate); 
    IEnumerable<DomainModels.Reports.MeanData> viewModel = 
        Mapper.Map<IEnumerable<DomainModels.Reports.MeanData>>(model);
}

return PartialView("_Grid", viewModel);

マッピングの作成をアプリケーションの開始に移動します。

Mapper.CreateMap<DomainModels.Reports.MeanData, BusinessService.Report.MeanData>();

同じ名前の型がある場合は、エイリアスを使用することも検討してください。

using BusinessMeanData = BusinessService.Reports.MeanData;
using MeanDataViewModel = DomainModel.Reports.MeanData;

ViewModelまたは(より良い)ビューモデルとして機能するタイプの名前に接尾辞を追加します。この場合、コードは次のようになります。

using (var reportsClient = new ReportsClient())
{
    var model = reportsClient.GetData(reportType, toDate, fromDate); 
    var viewModel = Mapper.Map<IEnumerable<MeanDataViewModel>>(model);
}

return PartialView("_Grid", viewModel);
于 2013-10-17T14:37:58.617 に答える