Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 实体框架:如何将实体用作内存中的业务对象_.net_Entity Framework_Design Patterns - Fatal编程技术网

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

.net 实体框架:如何将实体用作内存中的业务对象,.net,entity-framework,design-patterns,.net,Entity Framework,Design Patterns,我相信,大多数使用实体框架的人有时只在某些业务操作中需要一个实体,而实际上从未将其持久化到数据库中。例如,在线商店结帐向导,您希望在其中填写客户和地址信息,但仅在客户完成向导并实际购买产品后才将其保留。在此期间,我可能还想保存其他内容,因此我不能将我的用户对象附加到上下文,因为这样它也会被保存 通常我使用一个工作单元模式,所以我的上下文生命周期很短。实体必须存在于不同的上下文实例之间 以下是我到目前为止想到的一些可能性: 在内存中使用分离的实体(会话状态),并在需要保存时附加它们 只需保存它们

我相信,大多数使用实体框架的人有时只在某些业务操作中需要一个实体,而实际上从未将其持久化到数据库中。例如,在线商店结帐向导,您希望在其中填写客户和地址信息,但仅在客户完成向导并实际购买产品后才将其保留。在此期间,我可能还想保存其他内容,因此我不能将我的用户对象附加到上下文,因为这样它也会被保存

通常我使用一个工作单元模式,所以我的上下文生命周期很短。实体必须存在于不同的上下文实例之间

以下是我到目前为止想到的一些可能性:

  • 在内存中使用分离的实体(会话状态),并在需要保存时附加它们
  • 只需保存它们,然后当它们变成不需要的数据时删除它们
  • 为此使用单独的非EF类,并在需要保存时转换为EF
还有其他的可能性吗?
感谢您的见解。

我建议采用方法1或3,具体取决于体系结构的其他部分

如果将EF与POCO一起使用,这确实不是问题-但是,如果使用生成的实体类,可能会遇到另一个问题:在将它们发送到UI层之前,是否将它们映射到POCO中?
如果没有,你应该改变这一点。举个例子,这将使映射过程变得平滑和简单


我向您指出这一方向的原因是,如果您的EF实体与您的业务和/或UI层紧密耦合,并且以后希望将EF切换到其他层,那么您将面临比正确映射多得多的工作。

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

是的,我将EF4与POCO一起使用。因此,我建议只实例化CLR对象,根据需要将它们保持在会话状态,并在需要保存时将它们附加到对象上下文。这可能是到目前为止最容易实现的,因为在上下文生命周期之间仍然需要一些中间存储,并且您不需要强制您的ObjectContext跟踪他们永远不需要知道的更改。