我正在研究在.NET Framework 4.6.1
下運行的ASP.NET Core
應用程序。我正在使用Entity Framework 6
,因爲Entity Framework Core
截至目前有一些限制(特別是與多對多關係)。我想了解如何通過ASP.NET Core
的依賴注入來正確設置和使用實體框架。在ASP.NET Core中設置實體框架
問題1
應該MyContext繼承System.Data.Entity.DbContext
或Microsoft.Data.Entity.DbContext
?
問題2
其中哪些是設置它作爲一種服務,以便它可以在構造函數中被注入的正確方法?
private const string ConString = "myConnectionString";
public void ConfigureServices(IServiceCollection services)
{
//FIRST WAY - requires MyContext to be of type Microsoft.Data.Entity.DbContext
services.AddDbContext<MyContext>(options => { });
//SECOND WAY - requires MyContext to be of type Microsoft.Data.Entity.DbContext
services.AddEntityFramework.AddDbContext<MyContext>(options => { });
//THIRD WAY
services.AddTransient(provider => new MyContext(ConString));
//FOURTH WAY
services.AddScoped(provider => new MyContext(ConString));
}
雖然AddTransient
和AddScoped
之間的差異明確定義in the documentation。
問題3
在其中的情況下,上面是這樣要求的,假設我使用SQL Server?
services.AddEntityFrameworkSqlServer();
不知道爲什麼有三個命名空間(System.Data,Microsoft.Data和Microsoft.EntityFrameworkCore)用於同一個框架,但謝謝你的答案! Microsoft應該刪除這些EF Core擴展並將它們放入EF Core軟件包中 –