我在使用EF Core实现抽象通用基类时遇到麻烦。这可能很明显,但我没有看到。
基类:
public abstract class AContext<TUser> : IdentityDbContext<TUser>
where TUser : IdentityUser {
public AContext(DbContextOptions<AContext<TUser>> options, ILogger<AContext<TUser>> logger)
: base(options) {
}
}
子类:
public class Context : AContext<User> {
public Context(DbContextOptions<Context> options, ILogger<Context> logger)
: base(options, logger) { // problem is here with "options"
}
}
错误:
Cannot convert from 'DbContextOptions<Context>' to 'DbContextOptions<AContext<User>>'
。我尝试了投射,但这不起作用。是因为它不是协变的问题吗?我可以重新设计吗?
最佳答案
DbContextOptions<Context>
不可分配给DbContextOptions<AContext<TUser>>
。原因是可能对类型为T
的对象进行内部写操作,而对于DbContextOptions<Context>
则为Context
。 DbContextOptions<AContext<TUser>>
无法提供,因为它是T
是AContext<TUser>
。
协方差不是您的答案,因为协方差和逆方差仅适用于接口,不适用于类。
如果将构造函数中的参数类型从DbContextOptions<Context>
更改为DbContextOptions<AContext<User>>
,则一切都会正常运行。
关于c# - EF Core中抽象通用DbContext类的设计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41483771/