希望标题足够清晰。 我的存储库方法如下所示:
public async Task<List<Model>> GetAllByCode(string code)
{
using (var ctx = new DatabaseContext())
{
return await ctx.Models.Where(m => m.Code.Equals(code)).ToListAsync();
}
}
在该方法的结果中,我创建了一个可观察的集合,我将其绑定到视图中的Combobox。
Models = new ObservableCollection<Model>(await ModelRepository.GetAllByCode("code"));
但 ObservableCollection始终为空 。我甚至可以在调试器中看到结果(如果我没有弄错,它是IEnumerable
或IQueryable
集合。我100%确定数据库没问题,因为当我使用
return await ctx.Models.ToListAsync();
它返回数据库中的所有行。
谁能告诉我我做错了什么?
编辑:
问题出在实体框架中。我仍然没有找到解决方案,但我的上下文并没有从表中检索新数据,相反,他总是采用缓存(我猜)版本,即使我在每个请求中使用一次性上下文
但仍未回答。
答案 0 :(得分:0)
如果代码不是字符串,则LINQ to Entity中的等于失败,您可以使用String.Compare()
或(m.Code as string).Equals()
或者这样:
public async Task<List<Model>> GetAllByCode(string code)
{
using (var ctx = new DatabaseContext())
{
return await ctx.Models.Where(m => m.Code.ToLower() == code.ToLower()).ToListAsync();
}
}
或者在调试器中逐步检查表中的条目:
public async Task<List<Model>> GetAllByCode(string code)
{
using (var ctx = new DatabaseContext())
{
var all = await ctx.Models.ToListAsync();
var result = all.Where(m => m.Code.Equals(code, StringComparison.InvariantCultureIgnoreCase)));
return result;
}
}
请注意,ObservableCollection不是线程安全的。