ApplicationDbContext - 它在项目中的位置

111*_*110 7 asp.net-mvc entity-framework projects-and-solutions asp.net-mvc-5 asp.net-identity

我想在我的mvc 5应用程序中使用一个(EF)上下文文件,我想使用asp身份.

我在解决方案DAL,GUI和WebAPI中有一些项目.

我想ApplicationDbContext在DAL程序集中移动并从我的UI项目中删除EF completly.

ApplicationDbContext当你开始新项目时你用什么和asp身份?

您是将它留在UI层还是将其移动到数据层?

我真的没有经验丰富的开发人员问我希望它不会被投票.

Jos*_*ard 7

我认为你在谈论Entity Framework的DbContext?如果是这样,那么你在DAL组件中保留它是正确的.

只需移动它并更改命名空间即可.


Dav*_*ich 6

分离身份:

从UI中分离身份要复杂得多.在这里,微软已经如此密切地纠缠它们,以至于我建议将它留下来,直到你在专家级别理解Identity,EF和Repository Pattern.

但是,如果您有兴趣将身份与UI级别分开,这里有来自Dino Esposito的优秀资源


  • 请注意ApplicationDbContext您的帐户控制器的构造函数中的引用:

    public AccountController()
        : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>
                             (new ApplicationDbContext())))
    
    Run Code Online (Sandbox Code Playgroud)

这很容易成为DAL中Context的引用.

  • 在上下文中使用Repo会很困难.这需要重写UserManager我非常怀疑你想做的事情.

  • 您可以创建一个继承自ApplicationDbContext接口并通过接口抽象的子项

:

public class UserIdentityContext : ApplicationDbContext, IUserIdentityContext 
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用Ninject将您的帐户控制器绑定到抽象模式

public AccountController()
    : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>
                         (IUserIdentityContext identityContext)))
Run Code Online (Sandbox Code Playgroud)

但是,这些移动都不允许您从UI项目中删除EF程序集.在这里,Microsoft过于紧密地绑定了Data和UI元素.您必须重新编写帐户控制器.

这是他们正在处理的一个问题,并且可能会在MVC 6/Identity 3中大大改进