0
votes

Album navigation property is null in SellingRequest when I try to load it by include() while it seems every thing is OK!

These are the codes:

public class Album
{
    public int Id { get; set; }
    public string Note { get; set; }
    public virtual SellingRequest SellingRequest { get; set; }
    public int? SellingRequestId { get; set; }
    public List<Photo> Photos { get; set; }
    public virtual MortgageAndRent MortgageAndRent { get; set; }
    public int? MortgageAndRentId { get; set; }
}
public class SellingRequest
{
    #region Properies

    public int Id { get; set; }
    public virtual  Album Album { get; set; }
    public  int AlbumId { get; set; }

    #endregion Properies
}

Here is where I create album for SellingRequest.

public ActionResult DoUpload(HttpPostedFileBase file, UploadPopupViewModel uploadPopupViewModel)
    {
        if (file != null && file.ContentLength > 0)
        {
            string path = Path.Combine(Server.MapPath("~/Contents/Images"), Path.GetFileName(file.FileName));
            file.SaveAs(path);

            Photo photo = new Photo() { Path = path };
            ResponseMessage<Album> album = new ResponseMessage<Album>();

            if(uploadPopupViewModel.SellingRequestId!=0)
                album = _albumService.GetAlbumBySellingRequestId(uploadPopupViewModel.SellingRequestId);

            if (uploadPopupViewModel.MortgageAndRentId != 0)
                album = _albumService.GetAlbumByMortgageAndRentId(uploadPopupViewModel.SellingRequestId);

            if (album.IsSuccess)
            {
                photo.AlbumId = album.Result.Id;
            }
            else
            {
                Album newAlbum = new Album();
                if (uploadPopupViewModel.SellingRequestId != 0)
                    newAlbum.SellingRequestId = uploadPopupViewModel.SellingRequestId;

                if (uploadPopupViewModel.MortgageAndRentId != 0)
                    newAlbum.MortgageAndRentId = uploadPopupViewModel.MortgageAndRentId;

                ResponseMessage<Album> beingSavedAlbum = _albumService.Insert(newAlbum);

                ResponseMessage<SellingRequest> sellingRequest = _sellingRequestService.GetById(uploadPopupViewModel.SellingRequestId);
                if(sellingRequest.IsSuccess)
                {
                    sellingRequest.Result.AlbumId = newAlbum.Id;
                    _sellingRequestService.Update(sellingRequest.Result);
                }
                if(beingSavedAlbum.IsSuccess)
                photo.AlbumId = beingSavedAlbum.Result.Id;
            }
            ResponseMessage<Photo> beingSavedPhoto = _photoService.Insert(photo);
            if (beingSavedPhoto.IsSuccess)
            {
                return RedirectToAction("UploadPopup", "Photo", uploadPopupViewModel);
            }
            else
            {
                ModelState.AddModelError("ImageError", beingSavedPhoto.ErrorMessages[0]);
                return View("AddPhoto");
            }

        }
        else
        {
           ModelState.AddModelError("ImageError", "Please choose a photo.");
            return View("AddPhoto");
        }
    }
}

And Here is where I Try to query:

public IEnumerable<TEntity> GET(Expression<Func<TEntity, bool>> filter = null,
        Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
        string includeProperties = "")
    {
        IQueryable<TEntity> query = _context.Set<TEntity>();

        if (filter != null)
            query = query.Where(filter);

        foreach (var includeProperty in includeProperties.Split
            (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
            query = query.Include(includeProperty);

        if (orderBy != null)
            return orderBy(query).ToList();
        else
            return query.ToList();
    }

And consequently, Here is where I try to load Album by include.

public List<SellingRequest> GetAllSellingRequests()
    {

        List<SellingRequest> sellingRequests = _sellingRepository.GET(null, includeProperties: "Address,Album.Photos", orderBy: sR => sR.OrderBy(s => s.RegisteredDate).OrderByDescending(s => s.RegisteredDate)).ToList();
        return sellingRequests;
    }

With this function I have the Address property but Album is null! It also happens vise versa. I mean when I include the sellingRequest from album, it returns me null, as well! This is while I can include all other entities with no problem!

Edit This is the schema of my table in database:
SellingRequest Table
And this is the picture of Get.

Any suggestion would be appreciated in advance. Regards

What do the records in the database look like. Are the foreign keys OK? And what query do you see when you execute Get? - Gert Arnold
@GertArnold Thank you for your attention. I edited the post and put the pictures in it. - Atefeh Mohammadpoor
@GertArnold Of course, I don't know it's mapping is true or not because I had problem in it and asked it here. Once I could relate the entities together I marked it as answer. This is the mapping link: stackoverflow.com/questions/40319809/… - Atefeh Mohammadpoor