EF Core 3.1 "Nullability in constraints for type parameter..." 接口和 DbContext 问题

EF Core 3.1 "Nullability in constraints for type parameter..." issue with interface and DbContext

我有一个使用 EF Core 3.1 的 .NET Core 3.1 程序集项目,该项目启用了可空引用类型。我创建了以下界面:

public interface IMyDbContext
{
      DbSet<TEntity> Set<TEntity>() where TEntity : class;
}

我在我的上下文中实现了这个接口class:

public sealed class MyDbContext : DbContext, IMyDbContext
{
}

因为 DbContext 基础 class 已经有一个带有这个签名的方法,我实际上不必在 MyDbContext class.

中实现任何东西

我收到以下警告:

Nullability in constraints for type parameter 'TEntity' of method 'DbSet Microsoft.EntityFrameworkCore.DbContext.Set()' doesn't match the constraints for type parameter 'T' of interface method 'DbSet MyProject.IMyDbContext.Set()'. Consider using an explicit interface implementation instead.

我通过从项目文件中删除以下内容确认这是由我的项目使用可为 null 的引用类型和 EF Core 引起的:

<Nullable>enable</Nullable>

一旦我这样做了,警告就消失了。

我试过如下更改界面:

DbSet<TEntity> Set<TEntity>() where TEntity : class?;

但运气不好。

有没有办法在不从我的项目中删除可为 null 的引用类型的情况下使此警告消失?

所以我拒绝接受警告是真的,因为根据所有调查,我的 IDbContext 接口似乎与 Microsoft.EntityFrameworkCore.DbContext 实现该方法的方式完全匹配。

因此,为了处理警告的误报性质,我不情愿地将代码更改为 "fix"。

/// <inheritdoc cref="Microsoft.EntityFrameworkCore.DbContext"/>
/// <inheritdoc cref="IDbContext"/>
#pragma warning disable 8633
public abstract partial class DbContext : Microsoft.EntityFrameworkCore.DbContext, IDbContext
#pragma warning restore 8633

我遇到了同样的问题,通过重写 Set 方法解决了

public interface IApplicationDbContext
{
    DbSet<TEntity> Set<TEntity>() where TEntity : class;
}

public class ApplicationDbContext : DbContext, IApplicationDbContext
{

    public ApplicationDbContext(DbContextOptions options) : base(options)
    { }

    public override DbSet<TEntity> Set<TEntity>() where TEntity : class
    {
        return base.Set<TEntity>();
    }
}

warning没有了,studio建议方法可以去掉,不过我当然不会这样了=)

如有其他解决方案,不胜感激