gpt4 book ai didi

c# - EF Core 中抽象泛型 DbContext 类的设计

转载 作者:太空宇宙 更新时间:2023-11-03 23:05:15 24 4
gpt4 key购买 nike

我在使用 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>>' .

我试过转换,但没用。问题是因为它不是协变的吗?我能以某种方式重新设计它吗?

最佳答案

A DbContextOptions<Context>不可分配给 DbContextOptions<AContext<TUser>> .原因是可能存在对 T 类型对象的内部写操作。 , 这对于 DbContextOptions<Context>将是 Context . DbContextOptions<AContext<TUser>>无法提供,因为它是 T是一个 AContext<TUser> .

协变不是您的答案,因为协变和逆变仅适用于接口(interface),不适用于类。

如果您将构造函数中的参数类型从 DbContextOptions<Context> 更改为至 DbContextOptions<AContext<User>> ,一切都应该工作正常。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com