0

MVVM を使用して最初の WPF プロジェクトに取り組んでいます。サービス層をうまく抽象化して、(たとえば) XML ファイルを使用してデータを保存できるようにしました。POCO の IEnumerable コレクションを使用して、GUI 上のテーブルへの変更が自動的にリポジトリに反映されました。

現在、代わりに会社の DB2 データベースを使用するように切り替えようとしています。MyGeneration dOOdads を使用して、DB2 データベース用の DAL と BLL を生成します。DAL には組み込みの CRUD およびその他のユーティリティ メソッドがあります。

私の同僚の 1 人は、MyGeneration BLL DataView を自分の WPF アプリケーションに正常にバインドし (彼は MVVM を使用しませんでした)、DataView をリアルタイムで変更できるようにしました (BLL の SaveChanges メソッドの呼び出しのみが必要です)。

私の問題は、MyGeneration DataView と POCO のコレクションとの間の変換で、このレイヤーでの変更を明示的に更新する必要があることです。

私はこれに間違った方法でアプローチしていますか? AutoMapper のようなものが私の問題に対する答えになるでしょうか、それともまだリアルタイム マッピングができないのでしょうか?

public override IEnumerable<PromotionPlanHeader> ReadAll()
{
    foreach (DataRow row in bll_PROMPLANH.DefaultView.Table.Rows)
    {
        yield return new PromotionPlanHeader
        {
            PlanNumber = Convert.ToInt32(row["PLANNUMBER"]),
            Active = (row["ACTIVE"].ToString() == "1"),
            Capturer = row["CAPTURER"].ToString(),
            Region = row["REGION"].ToString(),
            Cycle = row["CYCLE"].ToString(),
            Channel = row["CHANNEL"].ToString(),
            StartDate = ConvertDb2Date(row["STARTDATE"].ToString()),
            EndDate = ConvertDb2Date(row["ENDDATE"].ToString()),
            AdvertStartDate = ConvertDb2Date(row["ADVERTSTARTDATE"].ToString()),
            AdvertEndDate = ConvertDb2Date(row["ADVERTENDDATE"].ToString()),
            BpcsDealNumber = Convert.ToInt32(row["BPCSDEALNUMBER"]),
            Description = row["DESCRIPTION"].ToString(),
            DeactivationReason = row["DEACTIVATIONREASON"].ToString(),
            LastSavedUsername = row["LASTUSER"].ToString(),
            LastSavedDateTime = ConvertDb2DateTime(row["LASTDATE"].ToString(), row["LASTDATE"].ToString().PadLeft(6, '0'))
        };
    }
}
4

1 に答える 1