数据库中的外键为空-为什么?

我有一个充满车辆的数据库。每辆车可以有很多照片。显然,图片表具有“车辆”外键。

无论何时添加图片,然后尝试检索它,我都无法。这是由于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?

wangxd624565586 回答:数据库中的外键为空-为什么?

向Gert Arnold致敬。他正确地指出 第二个代码段。您没有_vehicleContext.VehiclePictures.Include(vp => vp.VehicleForeignKey)

我自己回答这个问题有点像是骗子-再一次,是格特。这是我的登机说明....

2019年11月12日     图片控制器-我不明白为什么带图片的外键     该表始终以null返回。答案是因为我没有包括在内。 请参阅下面的查询中的包含。不要包含此内容,并且Vehicle始终为null。     还-我在.include(vp => vp.Vehicle)之后立即使用.ToList()     不要这样做-在进行任何过滤之前,它将整个结果集加载到内存中

    public Picture GetIndividualPicture(int vehicleId_,int pictureId_)
        {
            IEnumerable<Picture> pictures =  from v in _vehicleContext.Pictures
                        .Include(vp => vp.Vehicle)
                        .Where(x => x.Vehicle.Id == vehicleId_
                                && x.Id == pictureId_) select v;    
            return pictures.FirstOrDefault();
        }
本文链接:https://www.f2er.com/3131470.html

大家都在问