C# 在另一个上下文中引用身份用户

C# 在另一个上下文中引用身份用户,c#,entity-framework,asp.net-identity,C#,Entity Framework,Asp.net Identity,我对实体框架相当陌生,正在从事一个利用实体框架6、Identity 2、Web Api 2和MVC 5的项目 在项目的初始工作中,我创建了BusinessConnectionContext来表示我的业务模型的构建。到目前为止,我将自动创建的ApplicationDbContext保留在自己的设备上。我主要关注Web Api 2 在我的解决方案中,我有一个用于模型的程序集,其中包括BusinessConnectionContext和ApplicationDbContext,一个用于Web Api的

我对实体框架相当陌生,正在从事一个利用实体框架6、Identity 2、Web Api 2和MVC 5的项目

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

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

我需要将ApplicationDbContext用户与BusinessConnectionContext链接起来,但我找不到任何相关信息。我觉得我可能做错了

BusinessConnectionContext中的所有模型都应该重新定位到ApplicationDbContext中吗


这似乎是一个相当大的举措。如果在同一个系统中有其他不相关的上下文需要链接到标识,通常会发生什么情况?

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

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


有一件事与这个问题稍微无关,那就是ApplicationUserManager的问题,它是IUserStore的包装器


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

除了用户的Id之外,您还需要引用其他任何内容吗?目前还没有。此后,我将ApplicationDbContext合并到BusinessConnectionContext中,从而使BusinessConnectionContext扩展了IdentityContext(或它被称为什么)。但是,由于大多数ApplicationUser操作都是由ApplicationUserManager提供服务的,ApplicationUserManager是UserManager的一个扩展,它使用UserStore,因此我总是必须通过ApplicationUser.Id引用其他模型中的用户,并且很难加载任何其他模型都可能引用的ApplicationUser。我想我是在问,您只是需要特定任务的当前登录用户信息,还是希望获取任何用户信息?根据您的实际需求,有几种不同的解决方案。两者都有。在某些情况下,如果我得到一个可能引用ApplicationUser的模型,那么最好加载该关系。我现在意识到,这两种模式必须在相同的背景下才能实现。但是,默认情况下执行ApplicationUser和关联类的方式(ApplicationUserManager、UserManager、UserStore等)仍然使这项任务显然比在LINQ语句中使用Include()困难。用户只是EF实体。将users集合添加到您想要的任何上下文中,您应该可以。