.net core EF FirstOrDefaultAsync 获取不到数据
.net core EF FirstOrDefaultAsync can not get data
我遇到了一个奇怪的问题。我用.net core 3.1
,pkg是Microsoft.EntityFrameworkCore
,DB是Sqlite
.
我的实体:
public class Company
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Introduction { get; set; }
}
处理程序接口:
public interface ICompanyRepository
{
Task<IEnumerable<Company>> GetCompaniesAsync();
Task<Company> GetCompanyAsync(Guid companyId);
Task<bool> CompanyExistsAsync(Guid companyId);
}
当我执行以下方法时,只有第一个GetCompaniesAsync
return数据,其他return null:
// This method can be return data
public async Task<IEnumerable<Company>> GetCompaniesAsync()
{
return await _context.Companies.ToListAsync();
}
// This method return null
public async Task<Company> GetCompanyAsync(Guid companyId)
{
if (companyId == Guid.Empty)
{
throw new ArgumentNullException(nameof(companyId));
}
return await _context.Companies.FirstOrDefaultAsync(x => x.Id == companyId);
}
// This method also return null
public async Task<bool> CompanyExistsAsync(Guid companyId)
{
if (companyId == Guid.Empty)
{
throw new ArgumentNullException(nameof(companyId));
}
return await _context.Companies.AnyAsync(x => x.Id == companyId);
}
我试图删除 await
:
public async Task<Company> GetCompanyAsync(Guid companyId)
{
if (companyId == Guid.Empty)
{
throw new ArgumentNullException(nameof(companyId));
}
foreach (var c in _context.Companies.ToList())
{
if (c.Id == companyId)
{
return c;
}
}
return null;
}
可以return正常数据代替null
。
控制器中调用的方法如下:
public async Task<Company> GetCompany(Guid companyId)
{
var company = await companyRepository.GetCompanyAsync(companyId);
if (company == null)
{
return NotFound();
}
return Ok(company);
}
在头上,我有using Microsoft.EntityFrameworkCore;
另外,我看到有人说安装Microsoft.EntityFrameworkCore.Tools
可以,但我还是不行
我发现问题了,Guid在数据库中必须是大写才能匹配。
我遇到了一个奇怪的问题。我用.net core 3.1
,pkg是Microsoft.EntityFrameworkCore
,DB是Sqlite
.
我的实体:
public class Company
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Introduction { get; set; }
}
处理程序接口:
public interface ICompanyRepository
{
Task<IEnumerable<Company>> GetCompaniesAsync();
Task<Company> GetCompanyAsync(Guid companyId);
Task<bool> CompanyExistsAsync(Guid companyId);
}
当我执行以下方法时,只有第一个GetCompaniesAsync
return数据,其他return null:
// This method can be return data
public async Task<IEnumerable<Company>> GetCompaniesAsync()
{
return await _context.Companies.ToListAsync();
}
// This method return null
public async Task<Company> GetCompanyAsync(Guid companyId)
{
if (companyId == Guid.Empty)
{
throw new ArgumentNullException(nameof(companyId));
}
return await _context.Companies.FirstOrDefaultAsync(x => x.Id == companyId);
}
// This method also return null
public async Task<bool> CompanyExistsAsync(Guid companyId)
{
if (companyId == Guid.Empty)
{
throw new ArgumentNullException(nameof(companyId));
}
return await _context.Companies.AnyAsync(x => x.Id == companyId);
}
我试图删除 await
:
public async Task<Company> GetCompanyAsync(Guid companyId)
{
if (companyId == Guid.Empty)
{
throw new ArgumentNullException(nameof(companyId));
}
foreach (var c in _context.Companies.ToList())
{
if (c.Id == companyId)
{
return c;
}
}
return null;
}
可以return正常数据代替null
。
控制器中调用的方法如下:
public async Task<Company> GetCompany(Guid companyId)
{
var company = await companyRepository.GetCompanyAsync(companyId);
if (company == null)
{
return NotFound();
}
return Ok(company);
}
在头上,我有using Microsoft.EntityFrameworkCore;
另外,我看到有人说安装Microsoft.EntityFrameworkCore.Tools
可以,但我还是不行
我发现问题了,Guid在数据库中必须是大写才能匹配。