我有一个包含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
实体类型应用程序用户不是模型的一部分 当前上下文。
我需要做什么才能允许在当前上下文中使用应用程序用户?
我也做过类似的事情。为了实现关注点分离,我从存储库中获取用户管理器,然后在表示层中使用它。存储库内部使用内部 LoginDbContext 从用户存储创建用户管理器。这样,DbContext 和 Store 就与控制器分离。
如果你使用 VisualStudio 模板创建 WebApi 项目或其他东西,
请仔细查看 Startup.Auth.cs 文件中的UserManagerFactory = () => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
。
您可能会错过(new ApplicationDbContext())
部分。默认情况下,它具有空参数。
你需要创建一个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;
}
这会有所帮助。我是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.
就是这样!现在你有一个项目,模型都分离出来了(包括应用程序DbContext) - 没有错误!!祝你好运!