2015-05-30 17 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