我正在使用 MVVM 处理我的第一个 WPF 项目。我已经成功地抽象出我的服务层,以便我可以使用(例如)XML 文件来存储数据。使用我的 POCO 的 IEnumerable 集合,对 GUI 上表的任何更改都会自动传播到存储库。
现在我正尝试改用我们公司的 DB2 数据库。我们使用 MyGeneration dOOdads 为我们的 DB2 数据库生成 DAL 和 BLL。DAL 具有内置的 CRUD 和其他实用方法。
我的一位同事成功地将 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'))
};
}
}