Код EF Core сначала вставляет пустой родительский объект - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть следующая пара объектов.

public class Document : BaseEntity
{
    public Document()
    {
    }

    public StoredFile StoredFile { get; set; }
}

public class StoredFile : BaseEntity
{
    private StoredFile(string fileName, string fileLocation)
    {
        FileName = fileName;
        FileLocation = fileLocation;
    }

    public string FileName { get; set; }

    public string FileLocation { get; set; }

    public static StoredFile Create(string FileName, string FileLocation)
    {
        return new StoredFile(FileName, FileLocation);
    }
}

И у меня есть следующий контроллер.

    [Route("api/[controller]")]
public class FileController : Controller
{
    private readonly IFileSaver _fileSaver;
    private readonly IRepository _documentRepository;
    public FileController(IFileSaver fileSaver, IRepository documentRepository)
    {
        _fileSaver = fileSaver;
        _documentRepository = documentRepository;
    }

    [HttpPost("[action]")]
    public async Task<IActionResult> UploadDocument(IFormFile formFile)
    {
        if (formFile.Length <= 0) return Ok();
        var retVal = await _fileSaver.SaveFile(formFile);
        retVal = _documentRepository.Add(retVal);
        return Ok(new { StoredFileId = retVal.Id });
    }
}

Мой репозиторий является базовым универсальным репозиторием, который добавляет dbSet и SaveChanges.

Когда я использую метод UploadDocument и пытаюсь сохранить StoredFile, он также сохраняет пустую сущность «Документ» в таблицу «Документы».

Во время метода сохранения в выводе консоли я увидел нечто подобное:

 [Parameters=[@p0='?' (DbType = Int32), @p1='?' (DbType = Int32), @p2='?' (DbType = Int32), @p3='?' (DbType = DateTime), @p4='?' (Size = 4000), @p5='?' (DbType = Int32), @p6='?' (DbType = Int32), @p7='?' (DbType = Int32), @p8='?' (DbType = DateTime), @p9='?' (Size = 4000), @p10='?' (DbType = Int32), @p11='?' (DbType = Int32), @p12='?' (DbType = Int32), @p13='?' (DbType = Int32), @p14='?' (DbType = Int32), @p15='?' (Size = 4000)], CommandType='Text', CommandTimeout='30']
  INSERT INTO `Documents` (`AuthorityId`, `CaseId`, `CorrespondenceCharacterId`, `DateChanged`, `Description`, `DistrictId`, `DocumentDirection`, `DocumentTypeId`, `IncomingDate`, `Lp`, `PlanId`, `ReferencedDocumentId`, `SenderId`, `SourceId`, `StoringPlaceId`, `Subject`)
  VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12, @p13, @p14, @p15);
  SELECT `Id`
  FROM `Documents`
  WHERE ROW_COUNT() = 1 AND `Id` = LAST_INSERT_ID();

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

Кто-нибудь знает, что я сделал не так?

PS Когда я использовал метод «SeedData» в моем DatabasePopulator, хранение StoredFile не вызывает вставку пустого документа.

...