【问题标题】:Referencing an Identity user in another context在另一个上下文中引用身份用户
【发布时间】:2014-12-13 16:37:03
【问题描述】:

我对 Entity Framework 还很陌生,并且正在开发一个使用 Entity Framework 6、Identity 2、Web Api 2 和 MVC 5 的项目。

在项目的初始工作中,我创建了一个 BusinessConnectionsContext 来表示我的业务模型的构建。到目前为止,我将自动创建的 ApplicationDbContext 留给了它自己的设备。我主要关注 Web Api 2。

在我的解决方案中,我有一个模型程序集,其中包括 BusinessConnectionsContext 和 ApplicationDbContext、Web Api 程序集和 Web 程序集,使用 MVC5。 WebApi 和 Web 程序集都将使用 Models 程序集。

我已经到了需要将 ApplicationDbContext 用户与 BusinessConnectionsContext 链接起来的地步,但我找不到任何有关此的信息。我觉得我可能做错了。

是否应该将 BusinessConnectionsContext 中的所有模型重新定位到 ApplicationDbContext 中?

这似乎是一个相当大的举动。如果您有其他不相关的上下文需要链接到一个系统中的身份,通常会发生什么?

【问题讨论】:

  • 您是否需要通过 ID 以外的任何其他方式引用用户?
  • 还没有。我已经将 ApplicationDbContext 合并到 BusinessConnectionsContext 中,从而使 BusinessConnectionsContext 扩展了 IdentityContext(或任何它被称为的内容)。但是,由于大多数 ApplicationUser 操作由作为 UserManager 的扩展的 ApplicationUserManager 提供服务,它使用 UserStore,我总是必须通过 ApplicationUser.Id 在其他模型中引用用户,并且很难加载可能是的 ApplicationUser任何其他模型的引用。
  • 我想我是在问,您是只需要当前登录的用户信息来完成特定任务,还是想要获取任何用户信息?有几种不同的解决方案,具体取决于您的实际要求。
  • 两者兼而有之。在某些情况下,如果我得到一个可能引用 ApplicationUser 的模型,加载该关系会很好。我现在意识到这两个模型必须在相同的上下文中才能发生。然而,ApplicationUser 和关联类默认完成的方式(ApplicationUserManager、UserManage、UserStore 等)仍然使这项任务显然比仅在 LINQ 语句上使用 Include() 更难。
  • 用户只是 EF 实体。将 users 集合添加到您想要的任何上下文中,您应该没问题。

标签: c# entity-framework asp.net-identity


【解决方案1】:

简短的回答是所有模型都应该位于一个上下文中。要么坚持使用默认创建的 ApplicationDbContext,要么自己创建。到目前为止,我还没有看到任何处理可能在两个上下文之间共享的身份模型的东西,我也不认为事务会扩展到多个上下文。

至于当您有其他不相关的上下文需要链接到一个系统中的身份时会发生什么?我不知道。我可以说你在不同的命名空间中也有上下文和模型,并且一次只使用一个上下文,尤其是在更新时。


有一点与问题无关,是 ApplicationUserManager 的问题,它是 IUserStore 的包装器。

我有几个使用同一个上下文的项目,但是因为他们对谁访问该项目有不同的期望(一个通过 web 用于管理员,一个通过 web 用于用户,另一个通过 webapi 用于特殊用户),他们都有自己的自己的应用程序用户管理器。在某些时候,我决定使用 Unity 来确保一个上下文在所有存储库之间共享以及工作的统一性。我还必须确保在 ApplicationUserManager 使用的 IOwinContext 中也使用了这个上下文。由于我不是这方面的专家,所以我不会在这里详细介绍(我想这将是另一个问题的答案),但我只想说,关于多个项目之间共享的上下文和身份的主题,这是需要保留的东西记住。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2020-09-27
    • 2016-05-25
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多