我在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的列。此外,請檢查您的單個表是否具有訪問你的數據庫用戶(在我的情況下,數據庫用戶是數據庫和架構的所有者,但不是架構內的表!)