C# 在EF Core中填充不带关系的单独表格

C# 在EF Core中填充不带关系的单独表格,c#,entity-framework,api,C#,Entity Framework,Api,我需要添加一张图片,并将图片Id和产品Id存储在单独的productPicture表中。如果没有现有产品,则无法添加图片。如何做到这一点 这是我向数据库添加实体的代码: 控制器: [HttpPost] [Route("api/v1/catalog/products/pictures")] [ProducesResponseType((int)HttpStatusCode.Created)] [ProducesResponseType((int)HttpStatusCod

我需要添加一张图片,并将图片Id和产品Id存储在单独的productPicture表中。如果没有现有产品,则无法添加图片。如何做到这一点

这是我向数据库添加实体的代码:

控制器:

 [HttpPost]
    [Route("api/v1/catalog/products/pictures")]
    [ProducesResponseType((int)HttpStatusCode.Created)]
    [ProducesResponseType((int)HttpStatusCode.BadRequest)]
    public async Task<IActionResult> UploadPicture([FromForm]PictureViewModel pic)
    {
        try
        {
            var result = await _service.Add(pic);

            if (result.HasErrors)
            {
                return BadRequest(result.Errors);
            }

            return CreatedAtAction(nameof(GetById), result);
        }
        catch (Exception ex)
        {
            return BadRequest(ex.ToString());
        }
    }
[HttpPost]
[路线(“api/v1/目录/产品/图片”)]
[产品响应类型((int)HttpStatusCode.Created)]
[产品响应类型((int)HttpStatusCode.BadRequest)]
公共异步任务上载图片([FromForm]PictureViewModel pic)
{
尝试
{
var结果=等待服务添加(pic);
if(result.HasErrors)
{
返回错误请求(result.Errors);
}
返回CreateDataAction(nameof(GetById),结果);
}
捕获(例外情况除外)
{
返回BadRequest(例如ToString());
}
}
服务:

        public async Task<ServiceResultWithoutBaseEntity<Picture>> Add(PictureViewModel newItem)
    {
        var result = new ServiceResultWithoutBaseEntity<Picture>();
        result.Errors.AddRange(Validate(newItem));

        if (result.HasErrors)
            return result;

        var item = await newItem.MapToEntity(new Picture());

        _context.Pictures.Add(item);
        await _context.SaveChangesAsync();

        result.EntityResult = item;

        return result;
    }
公共异步任务添加(PictureViewModel newItem)
{
var result=新的ServiceResultWithoutBaseEntity();
result.Errors.AddRange(Validate(newItem));
if(result.HasErrors)
返回结果;
var item=await newItem.MapToEntity(新图片());
_上下文。图片。添加(项目);
wait_context.SaveChangesAsync();
result.EntityResult=项目;
返回结果;
}
助手:

        public async static Task<Picture> MapToEntity(this PictureViewModel source, Picture entity)
    {
        if (source == null || entity == null)
            return null;

        if (source.FileForUpload != null || source.FileForUpload.Length != 0)
        {
            AzureBlobExtensions abe = new AzureBlobExtensions();
            string folderValue = string.Concat(entity.ID.ToString().ToLower(), "/", DateTime.Now.ToString("yyyyMMddHHmmss"), source.FileForUpload.FileName);
            var fileUrl = await abe.UploadFile(source.FileForUpload, folderValue, Path.GetExtension(source.FileForUpload.FileName), "Picture");
            entity.VirtualPath = fileUrl;
        }
        else
        {
            entity.VirtualPath = source.FileUrl;
        }

        entity.FileName = source.FileName;
        entity.SeoFilename = source.SeoFilename;
        entity.AltAttribute = source.AltAttribute;
        entity.TitleAtrribute = source.TitleAtrribute;
        entity.MimeType = source.MimeType;
        entity.IsNew = source.IsNew;

        return entity;
    }
公共异步静态任务MapToEntity(此PictureView模型源,图片实体)
{
if(source==null | | entity==null)
返回null;
if(source.FileForUpload!=null | | source.FileForUpload.Length!=0)
{
AzureBlobExtensions abe=新的AzureBlobExtensions();
string folderValue=string.Concat(entity.ID.ToString().ToLower(),“/”,DateTime.Now.ToString(“yyyyMMddHHmmss”),source.FileForUpload.FileName);
var fileUrl=await abe.UploadFile(source.FileForUpload,folderValue,Path.GetExtension(source.FileForUpload.FileName),“Picture”);
entity.VirtualPath=文件URL;
}
其他的
{
entity.VirtualPath=source.FileUrl;
}
entity.FileName=source.FileName;
entity.SeoFilename=source.SeoFilename;
entity.AltAttribute=source.AltAttribute;
entity.titleAttribute=source.titleAttribute;
entity.MimeType=source.MimeType;
entity.IsNew=source.IsNew;
返回实体;
}
产品表

画表

产品图片表