使用不同的程序集添加遷移

asp.net-core c# ef-migrations entity-framework-core

我正在ASP.NET CORE 1.0.0中做一個項目,我正在使用EntityFrameworkCore。我有單獨的程序集,我的項目結構如下所示:

ProjectSolution
   -src
      -1 Domain
         -Project.Data
      -2 Api
         -Project.Api

在我的Project.ApiStartup

public void ConfigureServices(IServiceCollection services)
    {            
        services.AddDbContext<ProjectDbContext>();

        services.AddIdentity<IdentityUser, IdentityRole>()
                .AddEntityFrameworkStores<ProjectDbContext>()
                .AddDefaultTokenProviders();
    }

DbContext在我的Project.Data項目中

public class ProjectDbContext : IdentityDbContext<IdentityUser>
{
    public ProjectDbContext(DbContextOptions<ProjectDbContext> options) : base(options)
    {

    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {

        var builder = new ConfigurationBuilder();
        builder.SetBasePath(Directory.GetCurrentDirectory());
        builder.AddJsonFile("appsettings.json");
        IConfiguration Configuration = builder.Build();

        optionsBuilder.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection"));
        base.OnConfiguring(optionsBuilder);
    }
}

當我嘗試進行初始遷移時,我收到此錯誤:

“您的目標項目'Project.Api'與遷移程序集'Project.Data'不匹配。更改目標項目或更改遷移程序集。使用DbContextOptionsBuilder更改遷移程序集。例如options.UseSqlServer(connection,b = > b.MigrationsAssembly(“Project.Api”))。默認情況下,遷移程序集是包含DbContext的程序集。使用程序包管理器控制台的“默認項目”下拉列表或執行,將目標項目更改為遷移項目來自包含遷移項目的目錄中的“dotnet ef”。“

在看到此錯誤後,我嘗試執行位於Project.Api此命令:

dotnet ef --startup-project ../Project.Api --assembly“../../1 Data / Project.Data”遷移添加初始

我收到了這個錯誤:

選項'assembly'的“意外值'../../1 Domain / Project.Data'”

t know why I get this error, when I try to execute the command with the -assembly`參數t know why I get this error, when I try to execute the command with the我不t know why I get this error, when I try to execute the command with the

我不能從其他程序集創建初始遷移,我搜索了有關它的信息,但沒有得到任何結果。

有人有類似的問題嗎?

熱門答案

所有EF命令都有此檢查

if (targetAssembly != migrationsAssembly) 
       throw MigrationsAssemblyMismatchError;

targetAssembly =您正在操作的目標項目。在命令行中,它是當前工作目錄中的項目。在程序包管理器控制台中,它是在該窗口窗格右上角的下拉框中選擇的任何項目。

migrationsAssembly =包含遷移代碼的程序集。這是可配置的。默認情況下,這將是包含DbContext的程序集,在您的情況下是Project.Data.dll。如錯誤消息所示,您有兩個選項可以解決此問題

1 - 更改目標組件。

cd Project.Data/
dotnet ef --startup-project ../Project.Api/ migrations add Initial

// code doesn't use .MigrationsAssembly...just rely on the default
options.UseSqlServer(connection)

2 - 更改遷移程序集。

cd Project.Api/
dotnet ef migrations add Initial

// change the default migrations assembly
options.UseSqlServer(connection, b => b.MigrationsAssembly("Project.Api"))


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow