我有一个充满车辆的数据库。每辆车可以有很多照片。显然,图片表具有“车辆”外键。
无论何时添加图片,然后尝试检索它,我都无法。这是由于Vehicle外键返回为Null的事实。麻烦的是,我不明白为什么。此时,请了解在数据库级别上,图片表中的所有字段均已按预期填充。 Id (PK,int)
, Picture (nVarChar(max))
和 VehicleId(FK,int))
这3个字段。至关重要的是,外键(VehicleId)填充有有效的车辆ID。
我正在使用MVC。
首先,为图片模型编写代码。
public class Picture
{
public int Id {get; set;}
public string Image {get; set;}
[ForeignKey("VehicleId")]
public virtual Vehicle Vehicle{get;set;}
}
第二,用于保存图片的Picture Controller代码。注意我如何设置车辆外键。
重要提示-如果在“返回创建的内容”之前立即将测试代码放入图片中,则可以。车辆外键似乎已设置。如果我只是运行该应用程序并尝试立即检索图片(即无需添加新图片),那么Vehicle Foreign key为null。为什么呢我包含了我调用的检索单个图片的代码。
public async Task<IactionResult> PostNewPicture(int vehicleId_,PictureViewModel picture_)
{
try
{
if(ModelState.IsValid)
{
var vehicle = _vehicleRepository.GetVehicleById(vehicleId_);
if (vehicle == null) return BadRequest("Vehicle Not Found");
var newPicture = _mapper.Map<Picture>(picture_);
newPicture.Vehicle = vehicle;
_vehicleRepository.AddPicture(newPicture);
if (await _vehicleRepository.SaveChangesAsync())
{
var url = _linkGenerator.GetPathByaction("GetIndividualPicture","Pictures",new {vehicleId_ = newPicture.VehicleForeignKey.Id,pictureId_ = newPicture.Id});
var pictureViewModel = _mapper.Map<PictureViewModel>(newPicture);
return Created(url,_mapper.Map<PictureViewModel>(newPicture));
}
}
return BadRequest("Failed to save the picture");
}
catch(Exception ex)
{
return BadRequest($"Exception Thrown : {ex}");
}
}
获取单个图片的代码:
public Picture GetIndividualPicture(int vehicleId_,int pictureId_)
{
_vehicleContext.Pictures.Include(vp => vp.Vehicle);
IEnumerable<Picture> pictures = from v in _vehicleContext.Pictures.ToList()
.Where(x => x.Vehicle.Id == vehicleId_
&& x.Id == pictureId_) select v;
return pictures.FirstOrDefault();
}
为什么在添加时明确设置了VehicleForeignKey为Null?