Целевой проект не соответствует сборке миграций
У меня есть мультипроектное решение, где я не могу успешно добавить миграцию базы данных из основного проекта 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