.net core EF FirstOrDefaultAsync не может получить данные

Встречаю странный вопрос. Я использую .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 возвращают данные, остальные возвращают значение 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;
}

Он может возвращать обычные данные вместо 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 - это нормально, но я все еще не могу.


person jeremyjone    schedule 23.03.2020    source источник


Ответы (1)


Я обнаружил проблему, Guid должен быть в верхнем регистре в базе данных, чтобы соответствовать.

person jeremyjone    schedule 24.03.2020