我在Visual Studio 2013中创建了一个新的MVC项目,并向IdentityModels.cs和AccountViewModels.cs添加了一个“CompanyName”字段。然后,我安装了最新的测试版Npgsql的用的NuGet(Npgsql 2.1.3
和Npgsql.EntityFramework 2.1.3
)接下来,我打开web.config文件,并设置下面的连接字符串:Npgsql/Entity Framework不会在新MVC项目中更改/创建列
<connectionStrings>
<add name="DefaultConnection" connectionString="Server=127.0.0.1;Port=5432;Database=DBNAME;User Id=MYUSER;Password=MYPASS;" providerName="Npgsql" />
</connectionStrings>
最后,我创建了一个新的数据库,并改名为“公共”模式在db到pgadmin的“dbo”中。我创建了一个新的用户角色,并使其成为“dbo”模式的所有者。我使用this SQL脚本在架构上创建了相关表。
但是,当我尝试注册时,我得到了以下错误:
Exception Details: Npgsql.NpgsqlException: ERROR: 42703: column Extent1.CompanyName does not exist
那是什么Extent1表?我认为框架会自动改变表格以添加新列。是否有更多的设置需要完成?
更新
我手动添加的公司名称列在AspNetUsers表,现在它给出了这样的错误消息: 错误:42703:列Extent1.Discriminator不存在
不是鉴别列在更高版本的EF中删除?我有EF 6.
解决方案
对于其他人有类似的问题,这里是我做的。对于AspNetUsers表,您不仅需要添加自定义字段,而且每个表还必须有一个名为“Discriminator”(区分大小写)的类型为“字符变化”并且长度为256的列。此外,请检查您的单个表是否具有访问你的数据库用户(在我的情况下,数据库用户是数据库和架构的所有者,但不是架构内的表!)