我在使用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>则为ContextDbContextOptions<AContext<TUser>>无法提供,因为它是TAContext<TUser>

协方差不是您的答案,因为协方差和逆方差仅适用于接口,不适用于类。

如果将构造函数中的参数类型从DbContextOptions<Context>更改为DbContextOptions<AContext<User>>,则一切都会正常运行。

关于c# - EF Core中抽象通用DbContext类的设计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41483771/

10-10 09:48