我在添加一個初始遷移到.NET核心類庫裏面我的實體框架數據庫上下文問題的遷移。.NET核心實體框架 - 上下文添加在類庫
當我運行:
dotnet ef migrations add migrationName -c PlaceholderContext
我得到錯誤:
Could not invoke this command on the startup project 'Placeholder.Data'. This version of the Entity Framework Core .NET Command Line Tools does not support commands on class library projects in ASP.NET Core and .NET Core applications. See http://go.microsoft.com/fwlink/?LinkId=798221 for details and workarounds.
於是我點擊了link,得知這是不可能的遷移添加到類庫。但是,您可以將類庫項目轉換爲「應用程序」項目,但通過這樣做我無法從業務層(類庫)中引用此「應用程序」項目。
項目結構:
Placeholder.Web(的WebAPI)=>Placeholder.Business(類庫)=>Placeholder.Data(類庫)
Placeholder.Web => Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddMvc();
//HERE WE REGISTER DB CONTEXT, (STATIC CLASS IN BUSINESS LAYER)
services.InjectBusinessContext(@"Data Source=(localdb)\ProjectsV13;Initial Catalog=Placeholder;Integrated Security=True;Connect Timeout=30;");
services.InjectWebServices();
services.InjectBusinessServices();
}
我怎樣才能克服這個真的很煩人的問題?
更新(1)
我已經轉換我Placeholder.Data類庫到「應用程序」有靜態主要方法。因爲我無法再引用Placeholder.Business中的Placeholder.Data,所以我必須使用microsoft doc頁面上列出的解決方法2。當我現在運行遷移腳本我得到如下:
No database provider has been configured for this DbContext. A provider can be configured by overriding the DbContext.OnConfiguring method or by using AddDbContext on the application service provider. If AddDbContext is used, then also ensure that your DbContext type accepts a DbContextOptions object in its constructor and passes it to the base constructor for DbContext
衛生署ofcourse這不會工作,在的DbContext是從我Placeholder.Web應用程序註冊(通過業務層)。然後我唯一的選擇就是在新的靜態main方法添加新的上下文,我真的不希望這樣做..
我以後會在我回家時試試這個! – Reft
如果它適合你,請標記爲答案。如果您想更進一步,您還可以在DATA類庫項目中擴展IServiceCollection,並在其中添加DI和連接字符串,以便您的Web項目完全獨立於DATA項目。 – Reza
對不起,延遲迴復,只是嘗試了你的代碼,它的工作原理,歡呼聲。但!如果你看看我的項目結構,我有一個名爲migrations的自創文件夾。當我運行命令時,我在根目錄中得到一個新的遷移文件夾?我能改變這個嗎? 2.如果我想在第一次初始遷移後添加更多遷移,我是否需要再次執行這些步驟,或者可以使用包管理器控制檯以正常方式創建它? – Reft