我正在寻找一种设计方法,因此我没有任何代码可供分享。
我有一个WPF富客户端应用程序,它向用户显示详细数据。当用户单击“编辑”时,整个表单进入编辑状态。这显示了几个“添加”按钮。这些“添加”按钮打开子视图,为用户提供创建新实体的工具。想一想“向您正在使用的客户订单添加新商品”。这很容易。
当用户关闭这些子视图时,必须在父视图中显示和编辑新实体,以便继续进行详细编辑。类似于“在子表单上添加新项目,选择部件号,然后关闭子项并在父视图上添加数量和交付日期。我在这个工作流程中没有任何灵活性。我也有这个工作。” / p>
当用户完成父视图并对新添加的项目和详细编辑感到满意后,可以单击“保存”。那时所有的更改都需要返回数据库。如果用户单击取消,则包含在子视图上创建的实体的所有更改都必须消失,并且表单将返回其原始状态。
最后一点让我感到困惑。我几乎是Entity Framework的新手,所以我想我可以以某种方式在客户端上保留内存中的整个更改集,并在user-Save点将所有更改提交到数据库。我不知道是否可能,或者我必须如何改变我的数据更改以防止意外访问数据库。
要将所有事实放在桌面上,我使用的是工作单元模式,但如果需要,我可以访问EF上下文对象。如果我必须使用上下文对象,我必须跨多个视图及其相关的视图模型这样做。
我已经查看了很多stackoverflow Q& A但是无法找到或者认识到解决方案路径。我有一些关于使用克隆实体或可能是交易的想法,但不知道是否有其他人或如何在他们之间做出选择。这些将是新技能,需要花费时间学习。我愿意花时间学习一项新技能,但不要学习和尝试三到四个。
我很感激您提出的任何建议。
答案 0 :(得分:1)
在构造函数上从DB记录时读取值两次。一个私有变量用于当前,一个用于旧。
private string lNameOld;
private string lName;
public string LName
{
get { return lName; }
set
{
if(lName == value) return;
lName = value;
NotifyPropertyChanged("LName");
}
}
public void save()
{
if (lName != lNameOld)
{
// write to database
// really should process all in a transaction
lNameOld = lName;
}
{
public void cancel()
{
if (lName != lNameOld)
{
Lname = lNameOld; // notice capital L so Notify is called
}
{