我有一个使用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?;
但是没有运气。
是否有一种方法可以消除此警告,而不会从我的项目中删除可为空的引用类型?
答案 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