2015-05-30 22 views
0

我是MVC和實體框架的新手。 我已經創建了一個基於實體的模型。視圖正在使用新模型。 隨着查詢我填寫模型:LinQ中加入/關係的匿名對象

public IEnumerable<TimeTableInsertModel> getTimeTableDetails(int? id) 
{ 
    using (var db = new EFDbContext()) 
    { 
     return (from s in db.TimeTables 

       where s.TimeTableId == id 
       select new 
       { 
        TimeTableId = s.TimeTableId, 
        MovieId = s.MovieId, 
        RoomId = s.RoomId, 
        SeatsAvaible = s.SeatsAvaible, 
        StartTime = s.StartTime, 
        EndTime = s.EndTime, 
        Movie = s.Movie, 
        Reservations = s.Reservations, 
        Room = s.Room, 

        TicketQuantity = 0, 
       }).ToList().Select(x => new TimeTableInsertModel 
       { 
        TimeTableId = x.TimeTableId, 
        MovieId = x.MovieId, 
        RoomId = x.RoomId, 
        SeatsAvaible = x.SeatsAvaible, 
        StartTime = x.StartTime, 
        EndTime = x.EndTime, 
        Movie = x.Movie, 
        Reservations = x.Reservations, 
        Room = x.Room, 
       }); 
    } 
} 

這工作正常。但是: 表'Movie'與'Genre'和'Language'有2個關係。這兩張表格沒有填寫在模型中。我不知道該怎麼做。 我嘗試做的是這樣的:

Language = s.Movie.Language, 
Reservations = s.Reservations, 

Genre = x.Movie.Genre, 
Language = x.Movie.Language, 

但Visual Studio中說,該模型不包含定義「類型」和「語言」。

任何人都可以幫忙嗎?原始模型「TimeTableModel」具有以下內容:

public partial class TimeTable 
{ 
    public TimeTable() 
    { 
     Reservations = new HashSet<Reservation>(); 
    } 

    public int TimeTableId { get; set; } 
    public int MovieId { get; set; } 
    public int RoomId { get; set; } 
    public int SeatsAvaible { get; set; } 
    public DateTime StartTime { get; set; } 
    public DateTime EndTime { get; set; } 
    public virtual Movie Movie { get; set; } 
    public virtual ICollection<Reservation> Reservations { get; set; } 
    public virtual Room Room { get; set; } 
} 

而且TimeTableInsertModel(女巫使用的視圖):

public class TimeTableInsertModel 
{ 
    [Key] 
    public int TimeTableId { get; set; } 
    public int MovieId { get; set; } 
    public int RoomId { get; set; } 
    public int SeatsAvaible { get; set; } 
    public DateTime StartTime { get; set; } 
    public DateTime EndTime { get; set; } 
    public virtual Movie Movie { get; set; } 
    public virtual ICollection<Reservation> Reservations { get; set; } 
    public virtual Room Room { get; set; } 
    public int TicketQuantity { get; set; } 
} 
+1

「但是,Visual Studio中說,該模型不包含定義‘類型’和‘語言’。」是的,該模型沒有這種屬性。爲什麼這個錯誤讓你感到驚訝,你對此不瞭解的是什麼? – usr

+0

原始模型也沒有定義,但是當我使用該模型時,它們將正確填充。 – NVO

+0

這是不正確的。你一定在混淆課程。你明白爲什麼編譯器會發出這個錯誤嗎? – usr

回答

0

你的孩子是虛擬的,所以你需要告訴EF加載它們。有幾種這樣的技術:

from s in db.TimeTables.Include("Movie.Genre").Include("Movie.Language") 

這將導致電影和它的流派和語言孩子加載。

https://msdn.microsoft.com/en-us/data/jj574232.aspx

+0

嗯,那沒有工作,流派和語言對象保持爲空Message =「ObjectContext實例已被處置,不能再用於需要連接的操作。」 – NVO