Есть проэкт, понадобилось добавить в него таблицу. Всё бы хорошо, только таблица не появляется в базе после того как делаю drop database, ну и понятно получаю exception. (добавил да, таблица не появляется когда запускаю проэкт, я считал что удаление СУБД заставит её создать, для этого удаляю субд) База МуSQL. Теперь по подробнее... В папку Entities\DataBase добавил таблицу
namespace MyProj.Domain.Entities.Database{
public class Company{
[Key]
public int Id { get; set; }
[MaxLength(255)]
public String Name { get; set; }
}}
Идём дальше. В документации написано смотреть Entities\Migrations\Configuration.cs, смотрю...
internal sealed class Configuration : DbMigrationsConfiguration<MyProj.Domain.Concrete.MysqlEfDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
CodeGenerator = new MyCodeGenerator();
}
Зашёл в MysqlEfDbContext
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class MysqlEfDbContext : DbContext
{
public DbSet<Company> Companies { get; set; } // Дописал сюда таблицу,
// тут аналогично находятся другие таблицы
public DbSet<User> Users { get; set; }
}
Да, класс MyCodeGenerator
- не содержит ссылок на таблицы. Не стал его публиковать.Там перехват метода Generate
и вызов StripDbo
, особенного не увидел.
До изменений - создавалась база, таблицы и всё работало. После изменений, создалась база без новой таблицы, и исключение
Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.
Ладно, раз пишут true
- пусть, ставим AutomaticMigrationsEnabled = true;
. Тогда получаю другую ошибку
Table 'concreteperiods' already exists.
(это имя самой первой таблицы, которую нужно создать). Таблица companies, теперь создалась. Ошибка и первая и вторая появляется тут:
var user = (_repository.Users != null)?_repository.Users.
ToList().FirstOrDefault(x => x.Username.Equals(model.UserName)
&& x.Password.Equals(model.Password)) : null;
Смотрю что такое _repository
namespace MyProj.WebUI.Controllers
{
public class AccountController : Controller
{
private IProductRepository _repository;
readonly IAuthProvider _authProvider;
public AccountController(IAuthProvider auth, IProductRepository repo)
{
_repository = repo;
_authProvider = auth;
}
На AccountController
ссылок нет.
Почитал про миграцию. Теперь история с миграцией.
Сделал в консоли Enable-Migrations. Студия нулячая - получил ошибку - незнаю команду.
Сделал правой мыши на проект -> восстановить пакеты.
Enable-Migrations
PM> Enable-Migrations
Code First Migrations enabled for project MyProj.Domain.
PM> Add-Migration "company"
The project 'MyProj.Domain' failed to build.
Смотрю на проэкт - у меня создалась в корень ещё одна папка Mirgations, и в ней ещё один файл Configuration.cs - и как результат - проэкт не собирается т.к класс Configuration обьявле два раза. Удалил, повторил Add-Migration "company" получаю ошибку веселее...
PM> Add-Migration "company" System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. в MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(DbConnection connection) в System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) в MySql.Data.Entity.MySqlManifestTokenResolver.ResolveManifestToken(DbConnection connection) в ... System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Run() в System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) в System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) в System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner) в System.Data.Entity.Migrations.Design.ToolingFacade.Scaffold(String migrationName, String language, String rootNamespace, Boolean ignoreChanges) в System.Data.Entity.Migrations.AddMigrationCommand.Execute(String name, Boolean force, Boolean ignoreChanges) в System.Data.Entity.Migrations.AddMigrationCommand.<>c__DisplayClass2.<.ctor>b__0() в System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
EntityFramework версия 6.0.0.0, среда выполнения v 4.0.30319
VS 2017
Что ещё можно посмотреть, есть ли где ещё список таблиц, которые нужно создать при "первом запуске"?
После добавления новой таблицы вы должны создать миграцию.
Вводим в консоль диспетчера пакетов (Pkgmgr.exe):
Enable-Migrations
- включение миграций.
Add-Migration "Название"
- добавление новой миграции.
Update-Database
- обновление DB.
UPDATED: или вы можете создать свой инициализатор, унаследовать его от DropCreateDatabaseAlways<T>
и пересоздавать базу при каждом запуске (при этом теряются данные).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
С С# я знаком относительно недавно, всегда занимался веб-программированием
Есть текстовые файлы с PCL разметкой, их необходимо перекодировать в PDFЕдинственная некоммерческая программа которую я нашел - ghostpcl, при...
Пытаюсь получить текущего работающего пользователя, через WMIНо происходит не понятная мне ошибка
Необходимо вывести из данные из List в таблицу, которая находится во вложенном отчетеОднако при привязки List к DataSource вложенного отчета , выводится...