C# 对数据库的查询返回空或null,但保存数据不起作用

C# 对数据库的查询返回空或null,但保存数据不起作用,c#,sql-server,asp.net-core,entity-framework-core,C#,Sql Server,Asp.net Core,Entity Framework Core,我正在使用ASP.net MVC核心和实体框架核心创建一个web API。我正在使用NSwag来使用swagger文档和swagger UI,在那里我正在测试Post方法,它们可以工作,但是get返回空或null 在这里您可以看到数据库中的数据 获取表的所有数据的代码如下: // GET: api/UserRoles [HttpGet] public IEnumerable<UserRole> GetUserRoles() {

我正在使用ASP.net MVC核心和实体框架核心创建一个web API。我正在使用NSwag来使用swagger文档和swagger UI,在那里我正在测试Post方法,它们可以工作,但是get返回空或null

在这里您可以看到数据库中的数据

获取表的所有数据的代码如下:

 // GET: api/UserRoles
        [HttpGet]
        public IEnumerable<UserRole> GetUserRoles()
        {
            return _context.UserRoles.ToList();
        }
这是我的
UserRole
模型

public class UserRole:Dbo
{
    public string Name { set; get; }
    public string Description { get; set; }
}
这是我的
Dbo
课程

public abstract class Dto : IDto, INotifyPropertyChanged
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}
对于所有模型,所有查询都返回null或空

更新:

在这里,您可以看到调用
Where()
方法的结果为0(我只有一条
name
等于“admin”的记录),您还可以看到查询
StockMovementFlow
表时也返回了0条记录


您需要创建一个查询,从上下文中获取特定信息

使用上下文为表创建查询

例如

var query=context.Students
.其中(s=>s.StudentName==“比尔”)
.FirstOrDefault();

query.tolist()

问题在于
表达式。NotEqual
此处:

var parameter = Expression.Parameter(entity.ClrType, "e");
var body = Expression.NotEqual(
    Expression.Call(typeof(EF), nameof(EF.Property), new[] { typeof(DateTime?) }, parameter, Expression.Constant("DeletedAt")),
    Expression.Constant(null));
modelBuilder.Entity(entity.ClrType).HasQueryFilter(Expression.Lambda(body, parameter));
is目前所做的是设置一个(即,应用于所有查询的附加条件)类似于此(伪代码):

它将返回所有软删除的记录(在您的情况下是无),而我想这个想法是返回非软删除的记录,即

e => e.DeletedAt == null

因此,只需将
Expression.NotEqual
更改为
Expression.Equal
,问题就会得到解决。

显示用户角色是如何映射的(即使它是dbml生成的EF)@Gonzalo.-更新您确定查询的数据库正确吗?检查运行代码中的_context.Database.Connection.ConnectionString我非常确定,因为此数据库上下文上的写入操作会写入数据库。如图所示。我已创建了一个测试,读取数据库,然后在其上写入,读取为null或空,但写入成功我已尝试了其他方法,find(),Where(),first(),所有这些都是相同的,因此
.AnyAsync()
中的
if
返回
false
是否尝试从seed函数之外的上下文获取数据?你在哪里调用这个函数?是的,我已经尝试直接在控制器(UserRolesController、StockMovementFlowController等)上获取数据,并且在你的表中得到相同的结果,名称不是admin,它是AdministrRador,在你的Where语句中更改它?我爱你,伙计!你是对的,我用一种糟糕的方式实现了文件管理器。。。
var parameter = Expression.Parameter(entity.ClrType, "e");
var body = Expression.NotEqual(
    Expression.Call(typeof(EF), nameof(EF.Property), new[] { typeof(DateTime?) }, parameter, Expression.Constant("DeletedAt")),
    Expression.Constant(null));
modelBuilder.Entity(entity.ClrType).HasQueryFilter(Expression.Lambda(body, parameter));
e => e.DeletedAt != null
e => e.DeletedAt == null