我应该将我的应用程序上下文与用于标识的ApplicationDbContext分开吗?

时间:2015-02-01 00:33:42

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

在Visual Studio 2013中,创建ASP.NET项目时,它会生成一个文件 IdentityModels.cs ,其中包含一个继承自ApplicationDbContext的类IdentityDbContext<ApplicationUser>,最终继承自DbContext

我是否应该仅为帐户相关实体保留此上下文,并为应用程序中的所有其他实体创建单独的上下文,或者我应该将其混合使用。

任何安全问题或原因都不能将我整个应用程序的所有实体都包含在一个上下文中?

3 个答案:

答案 0 :(得分:18)

对此没有正确的答案。没有与2个不同上下文相关的安全问题。这一切都归结为您的架构 - 您是否需要创建对您域中用户的引用。在不同的域中,您无法将外键从用户表保存到域。

有几次我开始使用2个不同的dbContexts,但厌倦了额外的维护,没有任何收益和合并的东西。

因为您在询问这个问题,所以您可能无法从2个独立的db-contexts获得任何东西,只会在将来添加额外的代码和不必要的维护。所以我说只有一个开始。您可以随时在实际需要时分开。

答案 1 :(得分:7)

我会创建一个单独的上下文,主要是因为您可能需要在某个时候将您的用户帐户数据库与您的应用程序数据库分开。通常,组织的安全策略会要求这样做。如果您没有此要求并仍然保持两个上下文,则始终可以指向相同的连接字符串。我更喜欢拆分上下文,因为它使实体映射的流畅api受限制。将它保持独立还可以选择加密您的身份验证dd,也可能不是您的应用程序数据,这样可以在安全性和性能之间取得良好的平衡。

答案 2 :(得分:2)

这是一个很好的问题,也是我自己考虑的问题。

如果您希望应用程序使用域驱动设计洋葱架构,该怎么办?

成员资格和身份识别组件是基础架构应用程序层组件。

应用程序实体通常被视为层组件。

如果您使用单个上下文,那么在不损害架构完整性的情况下,将上下文的实体分离到单独的层中会有很多困难。

让我知道你在评论中的看法?