Libor Zapletal
Libor Zapletal

Reputation: 14102

ASP.NET MVC - not getting data from other tables

These are my classes:

public class HotelRoomRatingView
    {
        public int HotelID { get; set; }
        public roomKinds RoomKinds { get; set; }
        public HotelReview HotelReview { get; set; }

        public HotelRoomRatingView()
        {
        }
        public HotelRoomRatingView(int hotelId, roomKinds rooms, HotelReview review)
        {
            this.HotelID = hotelId;
            this.RoomKinds = rooms;
            this.HotelReview = review;
        }
    }

public class HotelReview
{
    public int HotelReviewID { get; set; }

    public double Rating { get; set; }

    public List<Review> Reviews { get; set; }

    public HotelReview()
    {
        this.Reviews = new List<Review>();
    }
}

public partial class roomKinds : object, System.ComponentModel.INotifyPropertyChanged
{
    [Key]
    public int roomKindsId { get; set; }

    private ObservableCollection<objectKind> objectKindField;

    public roomKinds()
    {

    }
    public roomKinds(Class.roomKinds origin)
    {
        this.objectKindField = origin.objectKind;
    }

    [System.Xml.Serialization.XmlElementAttribute(Order = 0)]
    public ObservableCollection<objectKind> objectKind
    {
        get
        {
            return this.objectKindField;
        }
        set
        {
            this.objectKindField = value;
            this.RaisePropertyChanged("objectKind");
        }
    }

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string propertyName)
    {
        System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
        if ((propertyChanged != null))
        {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }
}
public partial class Hotel : object, System.ComponentModel.INotifyPropertyChanged
    {
        [Key]
        public int HotelId { get; set; }
        private int hotIdField;
        // many others properties
        [System.Xml.Serialization.XmlElementAttribute(Order = 105)]
        public HotelReview hotelReview
        {
            get;
            set;
        }

        [System.Xml.Serialization.XmlElementAttribute(Order = 104)]
        public roomKinds rooms
        {
            get;
            set;
        }

        [System.Xml.Serialization.XmlElementAttribute(Order = 0)]
        public int hotId
        {
            get
            {
                return this.hotIdField;
            }
            set
            {
                this.hotIdField = value;
                this.RaisePropertyChanged("hotId");
            }
        }
    }

Get method in my repository looks like this:

public Models.Hotel Get(int id)
        {
            return db.hotels.SingleOrDefault(h => h.hotId == id);
        }

HotelId and hotId are okay I need it this way. So I am getting Hotel from database by LINQ and I get Hotel but I am not getting data from other tables. I am not getting HotelReview and RoomKinds. I got null in these properties but in database they are and they are connected with Hotel by ID. Thanks for help

Upvotes: 1

Views: 292

Answers (1)

ethorn10
ethorn10

Reputation: 1899

You will need to load those explicitly by using .Include:

return db.hotels.Include(hr => hr.HotelReview)
                .Include(rk => rk.RoomKinds)
                .SingleOrDefault(h => h.hotId == id);

UPDATE

Assuming your entities are linked up properly, you should be able to just continue down the chain in your .Include:

return db.hotels.Include(hr => hr.HotelReview)
                .Include(r => r.HotelReview.Reviews)
                .Include(rk => rk.RoomKinds)
                .SingleOrDefault(h => h.hotId == id);

Upvotes: 3

Related Questions