我正在尝试使用EF Core运行.NET Core Web应用程序。为了测试存储库,我添加了一个MyDbContext
,它继承了EF DbContext
和接口IMyDbContext
。
public interface ICalendarDbContext
{
DbSet<MyModel> Models { get; set; }
}
public class MyDbContext : DbContext, IMyDbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
{
}
public virtual DbSet<MyModel> Models { get; set; }
}
上下文接口被注入到我的通用存储库中:
public class GenericRepository<TEntity> : IGenericRepository<TEntity>
{
private readonly IMyDbContext _context = null;
public GenericRepository(IMyDbContext context)
{
this._context = context;
}
}
当我在startup.cs上使用此代码(不带界面)时:
services.AddDbContext<MyDbContext>(options =>
options.UseSqlServer(...));
我遇到了运行时错误:
InvalidOperationException:无法解析类型的服务 尝试激活“ GenericRepository`1 [MyModel]”时出现“ IMyDbContext”
使用此行代码时:
services.AddDbContext<IMyDbContext>(options =>
options.UseSqlServer(...));
我得到了以下编译时错误代码:
无法将lambda表达式转换为类型'ServiceLifetime',因为它 不是委托类型
我的问题是如何正确配置services.AddDbContext
方法中的ConfigureServices
?
(Configure
方法内部是否需要任何更改?)
如果需要,我愿意修改IMyDbContext
答案 0 :(得分:2)
使用具有两个泛型类型参数的overloads之一,它使您既可以指定要注册的服务接口/类,也可以指定实现它的.promo {
position: relative;
}
.promo img {
z-index: 1;
}
.hilight {
background-color: rgba(0,0,0,0.65);
position: absolute;
height: 85px;
width: 415px;
font-family: Verdana, Geneva, sans-serif;
color: #FFF;
z-index: 1;
}
派生类。
例如:
DbContext
答案 1 :(得分:0)
刚刚找到答案:
我没有在IMyDbContext
和MyDbContext
之间添加范围。
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyDbContext>(options => options.UseSqlServer(...));
services.AddScoped<IGenericRepository<MyModel>, GenericRepository<MyModel>>();
services.AddScoped<IMyDbContext, MyDbContext>();
}