这可能是软件设计或模式问题。
使用 LINQ to SQL 的 C# Wnforms 解决方案。 有一个表单允许用户编辑客户对象的属性值。
如果用户想要创建一个新的客户,那么将向表单传递一个新的客户。
如果用户想要编辑现有客户,则将表单传递给现有客户。
当用户尝试关闭表单时,系统会检查是否需要保存对属性值的编辑,并提示用户保存更改:
protected Boolean CanExit()
{
Boolean isSaveNeeded = false;
String message = String.Empty;
if (dataContext.GetChangeSet().Updates.Contains(lookupObject))
{
message = "Save your changes before closing?";
isSaveNeeded = true;
}
else if (dataContext.GetChangeSet().Inserts.Contains(lookupObject))
{
message = String.Format("Save new {0} before closing?", lookupSingularName);
isSaveNeeded = true;
}
if (isSaveNeeded && XtraMessageBox.Show(message, "Close Form", MessageBoxButtons.YesNo, MessageBoxIcon.None, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
{ return ActionSave(); }
else
{ return true; }
}
这有两个问题:
提示为未设置属性的新客户保存。
如果用户编辑了属性值,然后将该值更改回其原始值,则提示保存
我有一个使用 ADO“原始值”解决这两个问题的模式。
使用 DataContext 解决问题的最佳方法是什么?
最佳答案
您可以使用 Memento 设计模式轻松解决它,(这样您可以比较对象 - 编辑前后)
您可以在此处查看 wiki 详细信息。
https://en.wikipedia.org/wiki/Memento_pattern
并且可以查看纪念品上的文章。
http://www.codeproject.com/Articles/186184/Memento-Design-Pattern
关于c# - 如何确定新创建的对象是否具有用户设置的任何属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32132561/