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