Миграции ядра Entity Framework в библиотеке классов .NETSTANDARD? - PullRequest
0 голосов
/ 24 августа 2018

Основная проблема: необходимо обновить базу данных SQL, чтобы иметь новые таблицы, поскольку я добавил новые сущности и наборы баз данных в слоях DataAccess и Entity.

Хорошо, мой проект выложен так. Решение> DataAccessLayerProject (контекст БД), ModelsProject (объекты), TesterProject (консольное приложение).

Консольное приложение - это способ запуска кода DataAccess и Entity.

Вот картинка для справки:

enter image description here

Мне нужны миграции, добавленные в DataAccessLayer, но появляется следующая ошибка:

PM> Add-Migration BazaarDBMigration

Начальный проект EntFrame.DataAccessLayer предназначен для платформы .NETStandard. Есть нет среды выполнения, связанной с этой платформой, и проекты, нацеленные на нее не может быть выполнен напрямую. Чтобы использовать основной пакет Entity Framework Менеджер Консоли Инструменты с этим проектом, добавить исполняемый проект нацеленный на .NET Framework или .NET Core, который ссылается на этот проект, и установите его как стартовый проект; или обновите этот проект до перекрестная цель .NET Framework или .NET Core. PM>

Хорошо, приложение консоли тестирования ссылается на этот проект. Давайте попробуем добавить это туда ..

PM> Add-Migration BazaarDBMigration В сборке не был найден DbContext 'EntFrame.TestDriver. Убедитесь, что вы используете правильную сборку и что тип не является ни абстрактным, ни обобщенным.

Есть идеи? Заранее благодарим за ваше время и опыт. :)

РЕДАКТИРОВАТЬ: я пробовал решение из другого аналогичного вопроса, но добавление второй целевой рамки толкает проблемы еще дальше вниз по кроличьей норе. Я извиняюсь.

РЕДАКТИРОВАТЬ: Вот код из моего контекста

public class BazaarDBContext : DbContext
    {
        public DbSet<Student> Students { get; set; }
        public DbSet<Course> Courses { get; set; }
        public DbSet<Sandwhich> Sandwhiches { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            SqlConnectionStringBuilder cnnStringBuilder = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["BazaarDBContext"].ConnectionString);
            cnnStringBuilder.UserID = ConfigurationManager.AppSettings["SQLConnectionUser"];
            cnnStringBuilder.Password = ConfigurationManager.AppSettings["SQLConnectionPassword"];

            string completedCnnString = cnnStringBuilder.ConnectionString;

            optionsBuilder.UseSqlServer(completedCnnString);
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            //modelBuilder.Entity<Student>().HasKey(s => new { s.StudentID_PK, s.StudentID_PK1 });
            modelBuilder.Entity<Student>().Property(s => s.Email).IsRequired();
            base.OnModelCreating(modelBuilder);
        }
    } 

1 Ответ

0 голосов
/ 25 августа 2018

Мы делаем эту точную настройку с нашими проектами.

Первая ошибка говорит вам, что вам нужно время выполнения (которого нет у библиотечного проекта).Вторая ошибка говорит вам, что вам нужно DbContext в библиотеке, куда вы добавляете миграцию.Две разные проблемы, но это должно привести вас на правильный путь:

  1. Откройте Powershell и перейдите в каталог вашего DataAccessLayer проекта
  2. Добавьте миграцию с помощью dotnet ef migrations add BazaarDBMigration --startup-project ..\EntFrame.TestDriver (при условии, что TestDriver проект на один уровень выше

Это добавит миграцию в каталог текущего проекта, а флаг --startup-project указывает, где находится проект во время выполнения.

...