我正在处理在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));
}
虽然AddTransient
和AddScoped
之间的差异定义明确in the documentation。
问题3
在上述哪种情况下需要这样做,假设我使用的是SQL Server?
services.AddEntityFrameworkSqlServer();
答案 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();