0

我对 SimpleMembership 及其在 ASP.NET MVC 网站中的使用有点困惑。

我的项目目前使用代码优先的 dbcontext,它位于一个名为“数据访问”的类库中。

我有另一个名为“DomainObjects”的类库,其中包括我在“数据访问”中声明的 dbcontext 使用的所有实体/对象。

我有另一个名为“DomainFactory”的项目,顾名思义,它公开了访问数据上下文、操作数据等的方法。

最后,我有一个名为“Web”的 MVC 4 应用程序(该应用程序实际上使用 IoC 来调用在“DomainFacotry”项目中声明的方法——但我认为这与我在这里想要实现的目标无关。)

我的 MVC 应用程序现在处于我希望为其添加安全性的阶段。

使用基本 Internet 应用程序模板,我可以看到 AccountModel.cs 文件中声明了一个 UsersContext,该上下文在整个应用程序中被大量使用。这不是我想要的行为。为了可测试性和关注点分离,我希望我的所有身份验证逻辑都由我的域类处理,但是,我不确定如何去做,希望能回答以下问题:

  1. 因为我的 MVC 应用程序没有引用我创建的 dbcontext,我如何重新生成和重新植入数据库?我应该使用 WebActivator 吗?这是首选方法吗?

  2. 将所有身份验证逻辑移至我的 DomainFactory 项目的最佳方法是什么?如果你这样做了,你是怎么做的?

  3. 使用我上面描述的方法时有什么需要注意的吗?

非常感谢

4

1 回答 1

1

您最大的问题是有多个上下文。EF 不能很好地处理多个上下文,即使您让它们发挥作用,此时也只能迁移一个上下文,因此其他上下文只能引用现有的 DBO。

不过,除此之外,将身份验证移到类库中并没有什么复杂的。ASP 和 EF 关心您的模型所在的位置。只要您的 DbContext 可以获得对它们的引用,就可以了。在这方面,您也可以将 DbContext 存储在类库中,但请注意,EF 只会在启动项目中自动查看 DbContext 实例。如果你把它放在一个类库中,你必须告诉它每次你add-migrationupdate-database使用-ProjectName 'MyClassLibrary'.

于 2013-03-05T15:01:38.263 回答