实体框架:如何将实体用作内存中的业务对象

时间:2010-07-13 07:16:07

标签: .net entity-framework design-patterns

我敢肯定,大多数使用实体框架的人有时只需要一个实体用于某些业务操作,而实际上并没有将其持久化到数据库中。例如,您要填写客户和地址信息的在线商店结账向导,但只有在客户处于向导结束并且实际购买产品时才会保留该向导。在此期间可能还有其他我希望保存的东西,所以我不能将我的用户对象附加到上下文中,因为它也会被保存。

通常我使用工作单元格,因此我的上下文生命周期很短。实体必须存在于不同的上下文实例之间。

这些是我到目前为止所考虑的一些可能性:

  • 在内存中使用分离的实体(会话状态),并在要保存它们时附加它们。
  • 无论如何只需保存它们,然后在它们变成不需要的数据时删除它们。
  • 为此使用单独的非EF类,并在要保存时转换为EF。

还有其他可能吗? 感谢您的见解。

2 个答案:

答案 0 :(得分:3)

我建议使用方法1或3,具体取决于您的架构的其余部分。

如果您将EF与POCO一起使用,这确实不是问题 - 但是,如果您使用生成的实体类,则可能还有另一个问题:在将它们发送到UI层之前是否将它们映射到POCO中? /> 如果没有,你应该改变它。看一下例如AutoMapper,它将使映射过程流畅而简单。

我指向你这个方向的原因是,如果你的EF实体与你的业务和/或UI层紧密耦合,以后想要将EF切换到别的东西,那么你需要做更多的工作。你,如果你有适当的映射。

答案 1 :(得分:0)

选项一可能是最好的。您可以使用默认构造函数创建EF实体的对象,更改其属性并执行您想要的任何操作。如果将它们添加到实体模型并调用SaveChanges,它们将仅保存到数据库中。