Я работаю над первым подходом к базе данных. 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, хотя я не уверен, полезно ли это. Спасибо, что нашли время, чтобы посмотреть на мой пост.