实体框架恢复更改

问题描述:

我正在开发一个带有4个步骤的向导的Web窗体:实体框架恢复更改

在每一步我都要创建从数据库生成的新实体。

问题是,作为一个wizzard,用户可以更改将生成要存储的值的控件的属性。

所以我需要释放创建的实体对象或将该实体值返回到存储在数据库中的原始行。

我该怎么做。

如果我将每个创建的实体对象设置为null,它应该工作吗?

通过,这是怎样的方式,我这样做:

entities = new Entities(); 

... 

Client client = new Client(); 
client.name = tbxName.text 

... 

entities.SaveChanges(); 
entities.Connection.Close(); 

所以如果此代码上的3份向导的第2部分向导执行和我回去fowrward通过这样设置多个一旦客户端创建运行不止一次,所以这是我的问题。

那么我该如何创建它:-P

Thannks !!!

如果您正在构建向导,则必须将其作为单个操作进行管理。这意味着您必须在会话中存储构建的实体图并仅在完整向导完成并确认后才保存它。您的步骤逻辑还必须检查相关数据是否已存在于实体图中,并使用它们而不是创建新图。

+0

感谢再+ LY 一个例子就是很好的:-P – RedEagle 2011-04-11 09:25:52

+0

谢谢你的建议有帮助... Yakimych我照顾它现在 – RedEagle 2011-04-13 08:20:32

+0

@RedEagle:那你期望什么样的榜样? – 2011-04-13 08:21:33

如果您使用的是Entity Framework,为什么不实施Unit Of Work模式?向导的每个部分都构建UoW,“最后一步”提供工作单元。

几年前在MSDN杂志上有一篇名为“The Unit Of Work Pattern And Persistence Ignorance”的文章解释了这个概念。

这是我做的方式:

1 - 创建一个地方,你可以管理您的会话变量:

public class SessionObjects { } 

2 - 保存我的ObjectContext的会议,所以我创建一个属性管理它在提到类:

public static ObjectContextEntities ObjectContextEntities 
{ 
    get 
    { 
     return (ObjectContextEntities)HttpContext.Current.Session["ObjectContextEntities"]; 
    } 
    set 
    { 
     HttpContext.Current.Session["ObjectContextEntities"] = value; 
    } 

} 

3-初始化向导上的开始和ObjectContext的处置它在其端:

void StartWizard() 
{ 
    SessionObject.ObjectContextEntities = new ObjectContextEntities(); 
} 

void StartWizard() 
{ 
    SessionObject.ObjectContextEntities = new ObjectContextEntities(); 
} 

void EndWizard() 
{ 
    ((ObjectContextEntities)SessionObject.ObjectContextEntities).Dispose(); 
} 

4至向导结果保存到数据库中,你可以拨打:

void SaveWizard() 
{ 
    ((ObjectContextEntities)SessionObject.ObjectContextEntities).SaveAllChanges(); 
} 

5至重设向导只需拨打EndWizard然后StartWizard。

我想你知道如何管理你的ObjectEntity对象和ObjectContext,所以你可以继续从这里通过你自己..