Целевой проект не соответствует сборке миграций

У меня есть мультипроектное решение, где я не могу успешно добавить миграцию базы данных из основного проекта University.Application, Контекст Db определен в сборке University.Infrastructure,

При попытке dotnet ef migrations add Initial в директории проекта University.Application я получаю следующую ошибку:

Your target project 'University.Application' doesn't match your migrations assembly 'University.Infrastructure'. Either change your target project or change your migrations assembly. Change your migrations assembly by using DbContextOptionsBuilder. E.g. options.UseSqlServer(connection, b => b.MigrationsAssembly("University.Application")). By default, the migrations assembly is the assembly containing the DbContext. Change your target project to the migrations project by using the Package Manager Console's Default project drop-down list, or by executing "dotnet ef" from the directory containing the migrations project.

У меня в основном проекте в Startup.cs определена сборка миграций:

services.AddEntityFrameworkSqlServer()
                .AddDbContext<UniversityContext>(options => 
                {
                    options.UseSqlServer(configuration["ConnectionString"],
                    sqlServerOptionsAction: sqlOptions => 
                    {
                        sqlOptions.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name);
                        ...

И в моем проекте University.Infrastructure я определил UniversityDbContextDesignFactory (я использую две разные строки подключения для времени выполнения и проектирования):

public class UniversityContextDesignFactory : IDesignTimeDbContextFactory<UniversityContext>
    {
        public UniversityContext CreateDbContext(string[] args)
        {
            var optionsBuilder = new DbContextOptionsBuilder<UniversityContext>()
                .UseSqlServer("Server=localhost,1433;Database=UniversityDb;User Id=sa;Password=Pass@word;");

            return new UniversityContext(optionsBuilder.Options, new NoMediator());
        }
        ...

Что мне здесь не хватает? Я попытался следовать официальной документации без удачи. Любая помощь приветствуется.

0 ответов

У меня такая же проблема, но исправление совсем другое. Мои ConfigureServices отличаются от ваших:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContextPool<AppDbContext>(option =>
        { 
           option.UseSqlServer(Configuration.GetConnectionString("ConnectionStringName")); //I set this on appsettings.json
        });
    }

Это мой appsettings.json на случай, если он вам понадобится, это просто пример:

    {
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Message": "Hello World from AppSetting.JSON",
  "ConnectionStrings": {
    "ConnectionStringName": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=DBNameHere;Integrated Security=True;"
  }
}

Проблема в том, что я выполняю приведенный ниже код в моем каталоге решений, который, очевидно, не содержит файлов EF Core, а не в каталоге, который необходимо заполнить файлами миграции (Data Access Layer folder). Ваш случай может быть другим, но не забудьте изменить папку, в которой находится вашDbContext файл находится.

Поэтому я сменил каталог на свой Data Access Layer папка в командной строке, тогда я выполняю приведенный ниже код, поскольку мой запускаемый проект включен Core.Web папка, и это также папка, содержащая мои Startup.csфайл. (-s means startup)

dotnet ef migrations add initialcreate -s ..\Core.Web\Core.Web.csproj
Другие вопросы по тегам