2016-07-14 140 views
4

我正在研究在.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.DbContextMicrosoft.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)); 
} 

雖然AddTransientAddScoped之間的差異明確定義in the documentation

問題3

在其中的情況下,上面是這樣要求的,假設我使用SQL Server?

services.AddEntityFrameworkSqlServer(); 

回答

3

問題1: System.Data。 Entity.DbContext

問題2:

services.AddScoped(provider => new MyContext(ConString)); 

你想每Web請求1個上下文

問題3:你不需要這個

那些其他分機是使用EF核心NOT EF 6

+0

不知道爲什麼有三個命名空間(System.Data,Microsoft.Data和Microsoft.EntityFrameworkCore)用於同一個框架,但謝謝你的答案! Microsoft應該刪除這些EF Core擴展並將它們放入EF Core軟件包中 –

0

首先qauestion: using Microsoft.EntityFrameworkCore;效果很好在我的項目。

第二個問題:你的第一種方式是正確的

第三個問題:如果配置一切都像你不需要添加services.AddEntityFrameworkSqlServer();

+0

你憑什麼在第二個答案? –

+0

我在我的'.Net Core'項目中檢查了'Entity Framework Core'的所有設置。我遇到了同樣的問題,只有這個設置對我的情況很好。 – MKasprzyk

+1

但是,正如你所說的那樣,是針對'Entity Framework Core',它與'Entity Framework 6'非常不同' –