我在Visual Studio 2013中创建了一个新的MVC项目,并在IdentityModels.cs和AccountViewModels.cs中添加了一个"CompanyName"字段。然后,我用Nuget安装了最新的Npgsql测试版(Npgsql 2.1.3
和Npgsql.EntityFramework 2.1.3
)。接下来,我打开web。配置并设置以下连接字符串:
<connectionStrings>
<add name="DefaultConnection" connectionString="Server=127.0.0.1;Port=5432;Database=DBNAME;User Id=MYUSER;Password=MYPASS;" providerName="Npgsql" />
</connectionStrings>
最后,我创建了一个新的数据库,并使用pgadmin将数据库中的"公共"模式重命名为"dbo"。我创建了一个新的用户角色,并将其设置为"dbo"模式的所有者。我用这个SQL脚本在模式上创建了相关的表。
然而,当我尝试注册时,我得到以下错误:
Exception Details: Npgsql.NpgsqlException: ERROR: 42703: column Extent1.CompanyName does not exist
Extent1表是什么?我认为框架会自动更改表以添加新列。还有更多的设置需要做吗?<标题> 更新我手动将CompanyName列添加到AspNetUsers表中,现在它给出了这个错误消息:错误:42703:列Extent1。不存在鉴别符
在以后版本的EF中没有删除Discriminator列吗?我有EF 6。
<标题> 解决方案对于其他有类似问题的人,我是这样做的。对于AspNetUsers表,您不仅需要添加自定义字段,而且每个表还必须有一个名为"Discriminator"(区分大小写)的列,类型为"字符变化",长度为256。此外,检查您的各个表是否有权访问您的db用户(在我的例子中,db用户是数据库和模式的所有者,但不是模式中的表的所有者!)
标题>标题>为什么不像这样为Postgres使用sql生成器:
PM> Install-Package EntityFramework.v5.PostgreSql
并配置EF使用手动迁移?