База данных сначала ORM Mapping, не включая внешние таблицы - PullRequest
0 голосов
/ 06 февраля 2020

Я работаю над первым подходом к базе данных. net core web api и использую структуру сущностей. База данных была создана еще в 2012 году, в которой я запустил сценарий скаффолдинга, который сгенерировал модели, и контекст базы данных, который отображает все отношения. Я заметил, что при вызове определенной таблицы через остальные API она включает в себя все атрибуты таблицы, кроме виртуальной (другие данные таблицы) в ответе. Похоже, что все правильное сопоставление клавиш на месте, но я не могу понять, почему данные не отображаются.

Я также заметил, что если класс содержит сам виртуальный атрибут, он показывает это. Так, например, у сотрудника есть менеджер (из класса сотрудник), а по остальному вызову я вижу данные о сотруднике и менеджерах. Но если я попытаюсь посмотреть на проекты для сотрудника, он окажется пустым. Вот соответствующие фрагменты кода, которые могут показать, где моя проблема лежит. В этом примере я буду использовать компанию и проекты, в которых у одной компании есть много проектов, а в каждом проекте - только одна компания.

entity.HasOne(d => d.Company)
    .WithMany(p => p.Project)
    .HasForeignKey(d => d.CompanyId)
    .OnDelete(DeleteBehavior.ClientSetNull)
    .HasConstraintName("FK_Project_Company");

Этот код взят из контекста базы данных, он показывает отношения между проектом и компанией. Это внутри конструктора моделей для Project.

public partial class Project
{
    public Project()
    {
    }
    public int ProjectId { get; set; }
    public virtual Company Company { get; set; }
}

Это соответствующие строки из класса Project, имеющие атрибут виртуальной компании.

public partial class Company
{
    public Company()
    {
        Project = new HashSet<Project>();
    }
    public int CompanyId { get; set; }
}

Соответствующие строки кода из класса Company.

[ApiController]
[Route("[controller]")]
public class CompanyController : ControllerBase
{
    private readonly DbContext _context;
    public CompanyController(DbContext context)
    {
        _context = context;
    }
    [HttpPost]
    [Route("post")]
    public IEnumerable<FrmCompany> POST()
    {
        return _context.Company;
    }
    }
}

И, наконец, контроллер для отправки данных через остальные API, хотя я не уверен, полезно ли это. Спасибо, что нашли время, чтобы посмотреть на мой пост.

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