【发布时间】:2014-11-10 01:56:18
【问题描述】:
我正在使用带有数据库优先工作流的 ASP.NET MVC 5。我已经在我现有的数据库中创建了身份表(AspNetUsers、AspNetRoles 等),但是我无法让 register 和 login 功能正常工作适当地。
这是IdentityModels.cs 类
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("MyConnectionString") // I use "MyConnectionString" instead of "DefaultConnection"
{
}
这是来自web.config 的 EF 连接字符串的样子
<connectionStrings><add name="MyConnectionString" connectionString="metadata=res://*/Entities.MyModel.csdl|res://*/Entities.MyModel.ssdl|res://*/Entities.MyModel.msl;provider=System.Data.SqlClient;provider connection string="data source=My-Pc\SQLEXPRESS;initial catalog=MyExistingDatabase;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
这里是从 edmx 生成的上下文类
public partial class MyConnectionString : DbContext
{
public MyConnectionString()
: base("name=MyConnectionString")
{
}
在我看来一切都很好,它应该能够在数据库中创建用户但是我分别在登录或尝试注册时收到以下错误:
登录:
实体类型 ApplicationUser 不是模型的一部分 当前上下文
第 73 行:var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
异常详细信息:System.InvalidOperationException:实体类型 ApplicationUser 不是当前上下文模型的一部分。
注册:
实体类型 ApplicationUser 不是模型的一部分 当前上下文
第 155 行:var result = await UserManager.CreateAsync(user, 型号.密码);
异常详细信息:System.InvalidOperationException:实体类型 ApplicationUser 不是当前上下文模型的一部分。
周围的大多数文章似乎都集中在 Code-First 以及如何从 LocalDb 到 SQLExpress 等以及如何更改连接字符串,但是我已经很长时间无法解决这个问题了。
编辑,解决方案:正如@ChrFin 提到的,您可以并排使用它们,这就是我最终要做的。我只是在web.config 中添加了一个新的regular 连接字符串,并让它指向现有的数据库。 PS。请记住,连接字符串名称不能与现有名称相同,并且必须与您提供给ApplicationDbContext 构造函数的名称相同。
【问题讨论】:
-
从数据库更新您的 edmx 文件。只需右键单击解决方案资源管理器中的文件从数据库更新
-
在 ApplicationDbContext 上下文中是 ApplicationUser,你应该在那里定义 DBSet
。 -
@ J.W。在那个问题上我不太同意你,我为什么要定义它?
-
因为错误说实体类型ApplicationUser不是当前上下文模型的一部分
标签: c# asp.net-mvc entity-framework asp.net-identity