1

我有一个包含 WebApi2、MVC5 和 DAL 项目(所有 RTM)的解决方案。

我想使用现在已加入的新成员资格位,但我不喜欢所有帐户内容都在帐户控制器中。做一个文件新项目(asp.net)将所有成员资格都耦合到帐户控制器。

在我的 DAL 中,我使用 EF6,因为我喜欢代码优先的理想,因为它适合我想要做的事情。我正在尝试获取帐户控制器代码并将其移至我的单独项目中。

我在 DAL 中的上下文很简单(取自 MVC 站点)

public class ApplicationUser : IdentityUser
{
    //a user can belong to multiple stores
    public virtual ICollection<StoreModel> Stores { get; set; }
}


public class DataContext : IdentityDbContext<ApplicationUser>
{
    public DataContext(): base("name=DefaultConnection")
    {
    }
    public DbSet<Business> Businesses { get; set; }
    public DbSet<ConsumerModel> Consumers { get; set; }
    public DbSet<StoreModel> Stores { get; set; }
}

从我的登录操作结果中的帐户控制器我尝试

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
  if (ModelState.IsValid)
     {
      var user = await UserManager.FindAsync(model.UserName, model.Password);
       if (user != null)
       {

它会引发错误User.FindAsync

实体类型 ApplicationUser 不是当前上下文模型的一部分。

我需要做什么才能允许在当前上下文中使用 ApplicationUser?

4

4 回答 4

1

我做过类似的事情。为了实现关注点分离,我从我的存储库中获取 UserManager,然后在表示层中使用它。Repository 在内部使用内部 LoginDbContext 从 UserStore 创建 UserManager。这样,DbContext 和 Store 就与控制器分离了。

于 2013-12-30T18:51:23.127 回答
0

您需要创建一个UserManager接受用户存储的用户存储,该用户存储接受您的dbcontext

public UserController()
        : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
    {
    }


    public UserManager<ApplicationUser> UserManager { get; private set; }

    public UserController(UserManager<ApplicationUser> userManager)
    {
        UserManager = userManager;
    }
于 2013-10-22T20:16:34.350 回答
0

如果您使用 VisualStudio 模板创建 WebApi 项目或其他东西,

请仔细查看UserManagerFactory = () => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));Startup.Auth.cs 文件。

你可能会错过(new ApplicationDbContext())一部分。默认情况下,它有空参数。

于 2014-06-03T04:47:14.853 回答
-1

我相信这会有所帮助。我对 MVC5 很陌生,我一直想将我的模型层与我的 MVC 网站分开,主要是因为我想我想在我的各种项目中共享模型。我一直无法关注我在各种帮助网站上找到的所有编程语言。我总是以我有限的知识无法解决很多错误而告终。但是,我找到了一种将 ApplicationDbContext 移出 MVC5 模型并且几乎没有任何错误的简单方法。所有工作都由 Microsoft 已经提供的向导完成。我想和大家分享我的小发现。这就是你要做的(一步一步):

1.  Create a MVC5 project with authentication. Call it ModelProject.
2.  Exclude everything from the project except
    a.  Properties
    b.  References
    c.  Models
    d.  packages.config

3.  The ModelProject will hold all your models (even ApplicationDbContext.) Rebuild it.
4.  Now, create a new MVC5 project with authentication. Call this Mvc5Project
5.  Import the ModelProject project into Mvc5Project .
6.  Wire the ModelProject into this project i.e. link in the reference.
7.  Exclude the following from the MVc5Project from the Models folder
    a.  AccountViewModels.cs
    b.  IdentityModels.cs
    c.  ManageViewModels.cs
8.  If you rebuild now, you will get a bunch of errors. Just go to the errors and resolve them using the right click method to get the new namespace from ModelProject. The namespace will show if you have wired the project in correctly.
9.  Also, dont forget to go to View/Manage and Views/Account of Mvc5Project and change the models in there to the new location otherwise you will get some weird cryptic errors.

而已!现在您有了一个项目,其中所有模型都被分离出来(包括 applicationDbContext)-并且没有错误!祝你好运!

于 2015-08-12T12:55:08.460 回答