我使用ASP.NET MVC 5和Database-First工作流程。我已经在现有数据库中创建了身份表(AspNetUsers
,AspNetRoles
等)但是我在获取注册和时遇到了问题登录功能以正常工作。
这是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, model.Password);
异常详细信息:System.InvalidOperationException:实体类型 ApplicationUser不是当前上下文模型的一部分。
大多数文章似乎都专注于Code-First以及如何从LocalDb转到SQLExpress等以及如何更改连接字符串但是我还没有能够在很长一段时间内解决这个问题
编辑,解决方案:正如@ChrFin所提到的,你可以将它们并排使用,这就是我最终要做的事情。我只是在web.config
中添加了一个新的regular连接字符串,并让它指向现有的数据库。 PS。请记住,连接字符串名称不能与现有名称相同,并且必须与ApplicationDbContext
构造函数相同。
答案 0 :(得分:5)
我认为ASP.NET身份不支持这种情况,因为它需要DbContext
扩展IdentityDbContext<ApplicationUser>
(或类似)。
为什么要强制身份进入DB-First环境? 你可以使用Code-First上下文用于Identity以及其他DB-First上下文而不会出现问题...
答案 1 :(得分:0)
您可以按照以下步骤解决此问题:
您将在web.config文件中找到连接字符串。
将此连接字符串放入标识模型clsss