2017-05-26 19 views
2

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

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

其他所有的工作,我已经检查,我的postgreSQL数据库包含任何与AspNet.Identity相关的表,即使它们是在项目使用SQL Server时自动创建的。其他与模型相关的表格正在出现并正在工

谢谢。

+0

请使用** clear问题语句**编写问题标题,而不是与问题/问题 –

+0

相关的工具您是否有从IdentityDbContext继承的单个上下文或单独的上下文?尝试创建所有对象的主脚本以查看它产生的内容:'update-database -Script -SourceMigration:$ InitialDatabase'。 –

+0

我有单独的上下文,其中一个用于身份,另一个用于其他所有内容。这两个上下文使用相同的连接字符串,我会尝试你所说的。谢谢@Steve,标题改变了抱歉。 – VPerezQ

回答

2

我无法使微软的AspNet.Identity与PostgreSQL的工作,它似乎是专与SQL Server进行工作,不承认一个不同的数据的上下文配置的情况下,不管你做什么。

我现在所有的东西都在外部库的帮助下工作,所以我会在别人遇到这个问题时提供一个我的问题的答案。

我跟着存在于以下项目的指示(增光vincechan):

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

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

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

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

一切都应该现在的工作。原谅这个答案糟糕的格式。

1

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

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 

所以,第一步是运行在包管理器控制台Enable-Migrations不带参数。如果你有一个干净的数据库,那么它将在SO topic mentioned earlier中工作。所以,如果你想要一个简单的解决方案,然后彻底销毁你的PostgreSQL数据库,再次创建它,只需运行Enable-Migrations

如果你不想破坏你的PostgreSQL数据库和/或丢失任何迁移之前做那么就能够迁移它只为单独的目录 ASP.NET身份背景。已经有一个SO answer解释如何做到这一点。

ApplicationDbContext启用某些目录迁移(如MigrationsIdentity):

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

添加初始迁移此背景:

Add-Migration IdentityInitial -ConfigurationTypeName MyProject.MigrationsIdentity.Configuration 

应用此迁移:

Update-Database -ConfigurationTypeName MyProject.MigrationsIdentity.Configuration 

这些后步骤将会在你的Po中有ASP.NET身份表通过Code First自动生成的stgreSQL数据库生成,您不需要使用SQL脚本手动运行任何操作。

在你已经提到你有单独的上下文的评论。然而,多种上下文方法存在缺点:you won't use them together easily。每次迁移数据库时,还必须明确指定与-ConfigurationTypeName标志的上下文。我会像discussed already一样使用单个上下文,但这取决于您的任务的要求。

版本:

  • 的EntityFramework 6

  • Microsoft.AspNet.Identity.Core 2.1

  • Npgsql的3.1.10.0

  • EntityFramework6.Npgsql 3.1.1.0