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'))
};
}
}