.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跟踪他们永远不需要知道的更改。