在 3 层 asp.net Web 表单应用程序中使用实体上下文对象的最佳模式是什么



>我有一个包含 3 个项目的解决方案:

  1. 自动数据访问 - 包含实体数据模型
  2. AutoBusinessLogic - 包含业务逻辑并使用 AutoDataAccess
  3. 自动演示 - 包含一个 ASP.NET Web 表单应用程序

现在我想知道在 BusinessLogic 层中创建实体对象上下文的最佳模式是什么,例如静态对象、本地对象等。感谢您的耐心等待。

BusinessLogic 根本不应该知道对象上下文!对象上下文的实例化应由 AutoDataAccess 中的类处理。最好是可以将业务逻辑与数据库访问技术隔离开来。这称为持久性忽略 (PI(。

例如,

假设您想通过电子邮件地址访问User对象。一种方法是这样的:

  1. AutoBusinessLogic项目中具有与FindByEmailAddress(string email)方法的IUserRepository接口。

  2. 有一个在AutoDataAccess项目中实现IUserRepositoryUserRepository对象。

  3. 让您的 WebForms 应用程序将UserRepository实例注入到IUserRepository界面后面的页面中。这里有如何执行此操作的示例。

  4. 当您的网络表单页面调用IUserRepository.FindUserByEmail 时,这将进入UserRepository。然后,UserRepository需要一个Entities对象来查找User

  5. 要访问Entities对象,您的UserRepository应该在其中注入一个对象,该对象在每个请求的基础上创建Entities对象。让我们将此对象的接口称为 IPerRequestEntitiesFactory ,您可以使用在 HttpContext.Items 集合中创建和存储Entities对象的HttpContextPerRequestEntitiesFactory来实现它。工厂将有一个GetEntities()方法,该方法将创建一个Entities对象并将其存储在HttpContext.Items中(如果尚不存在(。

还有其他问题需要考虑(您的Entities对象应在请求结束时释放(,但这是帮助您入门的合理结构。

最新更新