C# 对数据库的查询返回空或null,但保存数据不起作用
我正在使用ASP.net MVC核心和实体框架核心创建一个web API。我正在使用NSwag来使用swagger文档和swagger UI,在那里我正在测试Post方法,它们可以工作,但是get返回空或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() {
// 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