无法使用 PostgreSQL 配置 AspNet.Identity



我有一个使用SQL Server设置的Web项目,现在必须迁移到PostgreSQL。我正在使用实体框架版本 6.0 和最新版本的 Microsoft.AspNet.Identity 来管理用户凭据。我使用的是VS2015和.NET Framework 452。

该项目适用于PostgreSQL服务器,除了AspNet.Identity之外的所有内容。当我尝试注册新用户或登录时,我收到与此问题中描述的相同的错误消息。同样的错误,同样的行,但问题是 2 年前的,给出的解决方案对我不起作用(我已经多次尝试添加迁移和更新数据库)。

其他一切都有效,我已经检查过了,我的postgreSQL数据库不包含任何与AspNet.Identity相关的表,即使它们是在项目使用SQL Server时自动创建的。其他与模型相关的表存在并正常工作。

谢谢。

我无法使Microsoft的AspNet.Identity与postgresql一起使用,它似乎被设计为与SQL Server一起使用,并且无论您做什么都不承认存在不同的数据上下文配置。

我现在在外部库的帮助下一切正常,因此如果其他人遇到此问题,我将为我的问题提供答案。

我按照以下项目中的说明进行操作(归功于Vincechan):

  • PostgreSQL.AspNet.Identity.EntityFramework on github.com

第 2 步有点问题。将项目导入我的解决方案后,我必须解决其中的参考问题。在程序包管理器控制台中,可以安装缺少的程序包和/或更新已过期的程序包。我的最终配置需要使用:

  • 我的主项目上的Npgsql 3.2.2(使用EntityFramework6.Npgsql)
  • 下载项目上的Npgsql 2.2.7(使用Npgsql.EntityFramework)

准备好一切后,添加新的迁移(Add-Migration <migration-name)并更新数据库(Update-Database)。

现在执行创建与标识相关的表的 SQL 脚本,它们不会像使用 SQL Server 那样自动创建。脚本包含在项目中(文件PostgreSQLIdentity.sql)。

现在一切都应该正常了。请原谅这个答案的格式不佳。

如果您的 PostgreSQL 数据库不包含任何与 ASP.NET 身份相关的表,则很可能意味着未为 ASP.NET 身份上下文类启用迁移。就我而言,我正在使用 VS 脚手架,我的意思是这个类:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>

因此,第一步是在包管理器控制台中运行不带参数的Enable-Migrations。如果您有一个干净的数据库,那么它将完全按照前面提到的 SO 主题的工作方式工作。因此,如果您想要一个简单的解决方案,请完全销毁您的PostgreSQL数据库,再次创建它并简单地运行Enable-Migrations

如果您不想销毁 PostgreSQL 数据库或/并丢失之前完成的任何迁移,则只需在单独的目录中仅为ASP.NET 身份上下文启用迁移即可。已经有一个SO答案解释了如何做到这一点。

在某些目录中启用迁移(例如MigrationsIdentity) 对于ApplicationDbContext

Enable-Migrations -ContextTypeName MyProject.Models.ApplicationDbContext -MigrationsDirectory MigrationsIdentity

为此上下文添加初始迁移:

Add-Migration IdentityInitial -ConfigurationTypeName MyProject.MigrationsIdentity.Configuration

应用此迁移:

Update-Database -ConfigurationTypeName MyProject.MigrationsIdentity.Configuration

完成这些步骤后,PostgreSQL 数据库中将有Code First 自动生成的 ASP.NET 标识表,您无需使用 SQL 脚本手动运行任何内容。

在评论中,您提到您有单独的上下文。但是,多上下文方法有一个缺点:您不会轻松地将它们一起使用。此外,每次迁移数据库时,还必须使用-ConfigurationTypeName标志显式指定上下文。我会使用已经讨论过的单一上下文,但这取决于您的任务要求。

版本:

  • 实体框架 6

  • Microsoft.AspNet.Identity.Core 2.1

  • Npgsql 3.1.10.0

  • 实体框架6.Npgsql 3.1.1.0

相关内容

  • 没有找到相关文章

最新更新