>我有一个包含 3 个项目的解决方案:
- 自动数据访问 - 包含实体数据模型
- AutoBusinessLogic - 包含业务逻辑并使用 AutoDataAccess
- 自动演示 - 包含一个 ASP.NET Web 表单应用程序
现在我想知道在 BusinessLogic 层中创建实体对象上下文的最佳模式是什么,例如静态对象、本地对象等。感谢您的耐心等待。
BusinessLogic 根本不应该知道对象上下文!对象上下文的实例化应由 AutoDataAccess 中的类处理。最好是可以将业务逻辑与数据库访问技术隔离开来。这称为持久性忽略 (PI(。
假设您想通过电子邮件地址访问User
对象。一种方法是这样的:
在
AutoBusinessLogic
项目中具有与FindByEmailAddress(string email)
方法的IUserRepository
接口。有一个在
AutoDataAccess
项目中实现IUserRepository
的UserRepository
对象。让您的 WebForms 应用程序将
UserRepository
实例注入到IUserRepository
界面后面的页面中。这里有如何执行此操作的示例。当您的网络表单页面调用
IUserRepository.FindUserByEmail
时,这将进入UserRepository
。然后,UserRepository
需要一个Entities
对象来查找User
。要访问
Entities
对象,您的UserRepository
应该在其中注入一个对象,该对象在每个请求的基础上创建Entities
对象。让我们将此对象的接口称为IPerRequestEntitiesFactory
,您可以使用在HttpContext.Items
集合中创建和存储Entities
对象的HttpContextPerRequestEntitiesFactory
来实现它。工厂将有一个GetEntities()
方法,该方法将创建一个Entities
对象并将其存储在HttpContext.Items
中(如果尚不存在(。
还有其他问题需要考虑(您的Entities
对象应在请求结束时释放(,但这是帮助您入门的合理结构。