Създадох нов MVC проект във Visual Studio 2013 и добавих поле „CompanyName“ към IdentityModels.cs и AccountViewModels.cs. След това инсталирах най-новата бета версия на Npgsql с Nuget (Npgsql 2.1.3
и Npgsql.EntityFramework 2.1.3
). След това отворих web.config и зададох следния низ за връзка:
<connectionStrings>
<add name="DefaultConnection" connectionString="Server=127.0.0.1;Port=5432;Database=DBNAME;User Id=MYUSER;Password=MYPASS;" providerName="Npgsql" />
</connectionStrings>
И накрая, създадох нова база данни и преименувах "публичната" схема в db на "dbo" с pgadmin. Създадох нова потребителска роля и я направих собственик на схемата "dbo". Създадох съответните таблици в схемата с този SQL скрипт.
Въпреки това, когато се опитам да се регистрирам, получавам следната грешка:
Exception Details: Npgsql.NpgsqlException: ERROR: 42703: column Extent1.CompanyName does not exist
Каква е тази таблица Extent1? Мислех, че рамката автоматично ще промени таблиците, за да добави нови колони. Има ли още настройка, която трябва да се направи?
Актуализация
Добавих колоната CompanyName ръчно към таблицата AspNetUsers и сега тя дава следното съобщение за грешка: ГРЕШКА: 42703: колона Extent1.Discriminator не съществува
Колоната Discriminator не беше ли премахната в по-късните версии на EF? Имам EF 6.
Решение
За всеки друг, който има подобен проблем, ето какво направих. Към таблицата AspNetUsers трябва да добавите не само персонализираните си полета, но всяка таблица трябва също да има колона с име „Дискриминатор“ (чувствителна към малки и главни букви) от тип „променлив знак“ и дължина 256. Освен това проверете дали отделните ви таблици имат достъп до вашия db потребител (в моя случай db потребителят беше собственик както на базата данни, така и на схемата, но не и на таблиците в схемата!)