Npgsql / Entity Framework不会在新的MVC项目中更改/创建列

时间:2014-05-07 20:56:27

标签: asp.net-mvc entity-framework asp.net-identity npgsql

我在Visual Studio 2013中创建了一个新的MVC项目,并在IdentityModels.cs和AccountViewModels.cs中添加了“CompanyName”字段。然后,我使用Nuget(Npgsql 2.1.3Npgsql.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用户是数据库和架构的所有者,但不是架构中的表!)

1 个答案:

答案 0 :(得分:0)

为什么你不为这样的Postgres使用sql生成器:

PM> Install-Package EntityFramework.v5.PostgreSql

并配置EF以使用手动迁移?