我在使用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>>'
。
我尝试过投射,但这不起作用。问题是由于它不协变吗?我能以某种方式重新设计吗?
答案 0 :(得分:3)
DbContextOptions<Context>
无法分配给DbContextOptions<AContext<TUser>>
。原因是对于T
类型的对象可能存在内部写入操作,DbContextOptions<Context>
将为Context
。 DbContextOptions<AContext<TUser>>
无法提供,因为它T
是AContext<TUser>
。
协方差不是你的答案,因为共同和逆变只适用于接口,而不适用于类。
如果您将构造函数中的参数类型从DbContextOptions<Context>
更改为DbContextOptions<AContext<User>>
,那么一切都应该可以正常工作。