ASP. NET Core Web API и Entity Framework Core; почему я получаю эту ошибку? - PullRequest
0 голосов
/ 01 февраля 2020

Я понимаю, что сериализатор в ASP. NET Core может не обрабатывать определенные ответы, но почему я получаю эту ошибку, когда не пытаюсь вернуть рассматриваемый объект?

См. Здесь ошибку: https://imgur.com/a/2se9eWB

enter image description here

Когда я пытаюсь присоединить мой ProjectResourceRequest к моему ProjectResourceAssignment, он записывает в базу данных, но выдает эту ошибку.

Классы моделей:

public abstract class DivDbBase
{
    [Key]
    public int Id { get; set; }

    [Required]
    public DateTimeOffset DateCreated { get; set; }

    public int CreatedByUserId { get; set; }

    [Required]
    public DateTimeOffset LastDateModified { get; set; }

    public int LastModifiedByUserId { get; set; }

    //[ForeignKey("CreatedByUserId")]
    //public DivDbUser CreatedByUser { get; set; }

    //[ForeignKey("LastModifiedByUserId")]
    //public DivDbUser LastModifiedByUser { get; set; }
}

public interface IDivDbEvent
{
    [Required]
    public DateTimeOffset StartDate { get; set; }

    [Required]
    public DateTimeOffset EndDate { get; set; }
}

public class DivDbProjectResourceRequest : DivDbBase, IDivDbEvent
{
    public int ProjectId { get; set; }
    public int RoleId { get; set; }

    [Required]
    public DateTimeOffset StartDate { get; set; }

    [Required]
    public DateTimeOffset EndDate { get; set; }

    [ForeignKey("ProjectId")]
    public DivDbProject Project { get; set; }

    [ForeignKey("RoleId")]
    public DivDbRole Role { get; set; }
}
    public class DivDbProjectResourceAssignment : DivDbBase, IDivDbEvent
{
    public int ProjectId { get; set; }
    public int RoleId { get; set; }
    public int UserId { get; set; }

    public int? ProjectResourceRequestId { get; set; }

    public DateTimeOffset StartDate { get; set; }
    public DateTimeOffset EndDate { get; set; }

    [ForeignKey("ProjectId")]
    public DivDbProject Project { get; set; }

    [ForeignKey("RoleId")]
    public DivDbRole Role { get; set; }

    [ForeignKey("UserId")]
    public DivDbUser User { get; set; }

    [ForeignKey("ProjectResourceRequestId")]
    public DivDbProjectResourceRequest ProjectResourceRequest { get; set; }
}

Тогда в моем контроллере ProjectResourceRequest уже существует, и я тоже не пытаюсь вернуть из сложных объектов:

DivDbProjectResourceAssignment dbProjectResourceAssignment = new DivDbProjectResourceAssignment()
{
    ProjectId = 1,
    RoleId = 1,
    UserId = 1,
    StartDate = DateTimeOffset.Now,
    EndDate = DateTimeOffset.Now,
    ProjectResourceRequestId = 1,
    CreatedByUserId = 1,
    LastModifiedByUserId = 1,
    LastDateModified = DateTimeOffset.Now,
    DateCreated = DateTimeOffset.Now
};
mContext.ProjectResourceAssignments.Add(dbProjectResourceAssignment);

mContext.SaveChanges();

Элементы добавляются правильно, но это приводит к сбою ответа контроллера независимо от того, возвращаю ли я этот элемент. Если мне нужно получить элемент из моей базы данных, используя mContext сейчас, я получаю ту же ошибку ... еще раз, возвращаю ли я этот элемент в любой форме из контроллера API.

1 Ответ

0 голосов
/ 01 февраля 2020

Так что проблема была в том, что я возвращал базовый класс EntityFramework из контроллера. Причина, по которой меня это удивило, заключается в том, что возвращаемый объект не имел никаких отношений, а только тот факт, что другие объекты, с которыми взаимодействовал mContext, вызывал полный ответ на ошибку.

...