C# 在EF Core中填充不带关系的单独表格
我需要添加一张图片,并将图片Id和产品Id存储在单独的productPicture表中。如果没有现有产品,则无法添加图片。如何做到这一点 这是我向数据库添加实体的代码: 控制器: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
[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;
返回实体;
}
产品表
画表
产品图片表