在ASP.NET Core中设置实体框架

时间:2016-07-14 12:34:56

标签: c# entity-framework asp.net-core

我正在处理在ASP.NET Core下运行的.NET Framework 4.6.1应用程序。我正在使用Entity Framework 6,因为Entity Framework 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));
}

虽然AddTransientAddScoped之间的差异定义明确in the documentation

问题3

在上述哪种情况下需要这样做,假设我使用的是SQL Server?

services.AddEntityFrameworkSqlServer();

2 个答案:

答案 0 :(得分:3)

问题1: System.Data.Entity.DbContext

问题2:

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

每个网络请求需要1个上下文

问题3:您不需要这个

其他扩展名是使用EF Core NOT EF 6

答案 1 :(得分:-1)

首先是qauestion: using Microsoft.EntityFrameworkCore;在我的项目中运作良好。

第二个问题:您的第一条路是正确的

第三个问题:如果您配置了类似的内容,则无需添加services.AddEntityFrameworkSqlServer();