EF在上传文件的情况下一次将记录插入到父级和子级

本文关键字:记录 一次 插入 文件 情况下 EF | 更新日期: 2023-09-27 18:24:26

插入父记录时,我可以在一个快照中插入相关的子记录。但如果我的子记录是文件,那么我如何在一次拍摄中插入和上传相关的子记录(用于文件)。文件将上传到不同的位置,而不是数据库。

子文件类:

public class File
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string RelativePath { get; set; }
    public string MimeType { get; set; }
    public int Size { get; set; }
    public int QuestionId { get; set; }
    public string ApplicationUserId { get; set; }
}

父项插入代码:

public ActionResult Create(QuestionCreateViewModel viewModel)
{
    var question = new Question
    {
        Text = viewModel.Text,
        QuestionType = viewModel.QuestionType,
        Answer = viewModel.Answer,
        Notes = viewModel.Notes,
        CategoryId = viewModel.CategoryId,
        Files = viewModel.Files // Also need to Upload
    };
    _questionRepository.Insert(question);
    _questionRepository.Save();
    return Json(null);
}

现在我把我的文件上传代码放在哪里,当插入父数据和子数据时上传文件。

EF在上传文件的情况下一次将记录插入到父级和子级

我是这样解决的:我使用了一个名为ManageFiles(Request.Files)的额外函数来上传所有文件,然后返回上传文件的列表。这样,当父记录插入时,它也会上传它的子文件,并在一次拍摄中插入文件记录。

public ActionResult Create(QuestionCreateViewModel viewModel)
{
    var question = new Question
    {
        Text = viewModel.Text,
        QuestionType = viewModel.QuestionType,
        Answer = viewModel.Answer,
        Notes = viewModel.Notes,
        CategoryId = viewModel.CategoryId,
        Files = ManageFiles(Request.Files)
    };
    _questionRepository.Insert(question);
    _questionRepository.Save();
    return Json(null);
}
private ICollection<File> ManageFiles(HttpFileCollectionBase fileCollection)
{
    var files = new List<File>();
    for (var index = 0; index < fileCollection.Count; index++)
    {
        if (fileCollection[index] == null || fileCollection[index].ContentLength <= 0)
        {
            continue;
        }
        if (UploadFile(Request.Files[index]))
        {
            var file = new File
            {
                Name = uploaded.FileName,
                RelativePath = uploaded.FilePath + uploaded.FileName,
                MimeType = uploaded.FileBase.ContentType,
                Size = uploaded.FileBase.ContentLength
            };
            files.Add(file);
        }
    }
    return files;
}