.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在数据库中必须是大写才能匹配。