EF Core 3.1“类型参数约束的可空性...”接口和DbContext问题

时间:2019-12-21 21:26:57

标签: c# .net-core entity-framework-core ef-core-3.1

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

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

我在上下文类中实现了此接口:

public sealed class MyDbContext : DbContext, IMyDbContext
{
}

由于DbContext基类已经具有带有此签名的方法,因此我实际上不必在MyDbContext类中实现任何东西。

我收到以下警告:

  

方法'DbSet的类型参数'TEntity'的约束中的可空性   Microsoft.EntityFrameworkCore.DbContext.Set()'不匹配   接口方法的类型参数“ T”的约束   'DbSet MyProject.IMyDbContext.Set()'。考虑使用   而是一个显式的接口实现。

我确认这是由我的项目使用可为空的引用类型引起的,并且EF Core并未从项目文件中删除以下内容:

<Nullable>enable</Nullable>

一旦我做了警告就消失了。

我尝试如下更改界面:

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

但是没有运气。

是否有一种方法可以消除此警告,而不会从我的项目中删除可为空的引用类型?

1 个答案:

答案 0 :(得分:0)

所以我拒绝接受该警告甚至是正确的,因为经过所有调查,看来我的IDbContext接口与Microsoft.EntityFrameworkCore.DbContext如何实现该方法完全匹配。

因此,为了处理警告的错误肯定性质,我很不情愿地将代码更改为“修复”。

/// <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