. net core EF FirstOrDefaultAsyn c не может получить данные - PullRequest
0 голосов
/ 23 марта 2020

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

// 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 - это нормально, но я все еще не могу.

1 Ответ

0 голосов
/ 24 марта 2020

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

...