1

我正在开发一个具有 4 个步骤的向导的 Web 表单:

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

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

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

我怎样才能做到这一点。

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

顺便说一句,这就是我的做法:

entities = new Entities();

...

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

...

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

因此,如果此代码在 3 个部分的向导的第 2 个向导部分上执行,并且一旦客户端创建运行不止一次,我就会通过这个集合返回和前进,所以这就是我的问题。

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

谢谢!!!

4

3 回答 3

4

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

于 2011-04-11T08:36:37.653 回答
0

如果您使用实体框架,为什么不实现工作单元模式?向导的每个部分都构建 UoW,“最后一步”提交工作单元。

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

于 2011-04-19T20:22:29.010 回答
0

这就是我这样做的方式:

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

public class SessionObjects { }

2-我将我的 ObjectContext 保存在 Session 中,因此我创建了一个属性来在提到的类中管理它:

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 。

我猜你知道如何在 ObjectContext 中管理你的 ObjectEntity 对象,这样你就可以自己从这里继续......

于 2011-04-19T21:53:03.760 回答