我有一个使用SQL Server设置的Web项目,现在必须迁移到PostgreSQL。我正在使用Entity Framework 6.0版和最新版本的Microsoft.AspNet.Identity来管理用户凭据。我正在使用VS2015和.NET Framework 452。
该项目适用于PostgreSQL服务器,除了AspNet.Identity之外的所有内容。当我尝试注册新用户或登录时,我会收到 this question 中描述的相同错误消息。相同的错误,相同的行,但问题是2年,给出的解决方案对我不起作用(我多次尝试添加迁移和更新数据库)。
其他所有工作,我已经检查过,我的postgreSQL数据库 NOT 包含任何与AspNet.Identity相关的表,即使它们是在项目使用SQL Server时自动创建的。其他与模型相关的表存在且有效。
谢谢。
答案 0 :(得分:4)
我无法使Microsoft的AspNet.Identity与postgresql一起使用,它似乎是为了与SQL Server一起工作而且不承认存在不同的数据上下文配置,无论你是什么做。
我现在在外部图书馆的帮助下完成了所有工作,所以如果有其他人遇到这个问题,我会回答我的问题。
我按照以下项目中的说明(信用到vincechan):
第2步有点问题。将项目导入我的解决方案后,我必须解决其中的参考问题。在程序包管理器控制台中,您可以安装缺少的程序包和/或更新过时的程序包。我的最终配置需要使用:
准备好所有内容后,添加新迁移(Add-Migration <migration-name
)并更新数据库(Update-Database
)。
现在执行创建与身份相关的表的SQL脚本,它们不会自动创建,就像使用SQL Server一样。该脚本包含在项目中(文件PostgreSQLIdentity.sql
)。
现在一切都应该有效。原谅这个答案的格式不佳。
答案 1 :(得分:2)
如果您的PostgreSQL数据库不包含与ASP.NET Identity相关的任何表,那么很可能意味着没有为ASP.NET Identity上下文类启用迁移。在我的情况下,我使用VS脚手架,我的意思是这个类:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
因此,第一步是在没有参数的Package Manager Console中运行Enable-Migrations
。如果你有一个干净的数据库,那么它将完全适用于SO topic mentioned earlier中的工作方式。因此,如果您想要一个简单的解决方案,那么完全销毁您的PostgreSQL数据库,再次创建它并只需运行Enable-Migrations
。
如果您不想破坏PostgreSQL数据库或/并且在此之前丢失任何迁移,只需在单独目录中启用仅针对ASP.NET标识上下文的迁移 / strong>即可。已经有SO answer解释了如何执行此操作。
在MigrationsIdentity
的某个目录(例如ApplicationDbContext
)中启用迁移:
Enable-Migrations -ContextTypeName MyProject.Models.ApplicationDbContext -MigrationsDirectory MigrationsIdentity
为此上下文添加初始迁移:
Add-Migration IdentityInitial -ConfigurationTypeName MyProject.MigrationsIdentity.Configuration
应用此迁移:
Update-Database -ConfigurationTypeName MyProject.MigrationsIdentity.Configuration
完成这些步骤后,PostgreSQL数据库中的ASP.NET身份表将由Code First自动生成 ,您不需要使用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