【发布时间】:2017-11-23 16:17:55
【问题描述】:
我正在使用DbContextScope。我正在尝试实现这个通用接口:
namespace EntityFramework.DbContextScope.Interfaces {
public interface IDbContextFactory {
TDbContext CreateDbContext<TDbContext>() where TDbContext : class, IDbContext;
}
}
目标是为以下函数提供我的实现:
namespace EntityFramework.DbContextScope {
public class DbContextScope : IDbContextScope, IDisposable {
public DbContextScope(IDbContextFactory dbContextFactory);
}
}
我似乎无法弄清楚如何实现此接口并将其正确地提供给 DbContextScope。我尝试了一个通用的实现:
public class MyDbContextContextFactoryGeneric : IDbContextFactory {
TDbContext IDbContextFactory.CreateDbContext<TDbContext>() {
Type type = typeof(TDbContext);
if (type == typeof(MyDbContext)) {
return new MyDbContext();
}
throw new NotImplementedException();
}
}
但我得到的错误是:“无法将类型 'MyDBContext' 隐式转换为 'TDbContext'”。
我尝试了一个显式的实现:
public class MyDbContextContextFactory : IDbContextFactory<MyDBContext> {
public MyDBContext Create() {
return new MyDBContext();
}
}
但是当我尝试像这样将它传递给 DbContextScope 时:
public class Test {
public void PerformTest() {
IDbContextFactory dbContextFactory = new MyDbContextContextFactory();
using (DbContextScope scope = new DbContextScope(dbContextFactory)) {
// Do stuff
}
}
}
我在 using 行之前的行上收到错误:“无法将类型 'MyDbContextContextFactory' 隐式转换为 'EntityFramework.DbContextScope.Interfaces.IDbContextFactory'。存在显式转换(您是否缺少演员表?)”
我做错了什么?
【问题讨论】:
标签: c# .net entity-framework generics