2017-05-04 89 views
0

我正在使用AJAX查询来调用引用模型的函数。实体框架查询加入问题

到目前为止它将详细信息返回给用户表,这一切都正常工作。问题是,我与另一个表有一对多的关系。

Person - PersonId去加入表 - personId链接到潜在的多个colourIds - colourId链接到颜色表。

因此涉及三个表格 - 人物,最喜欢的颜色和颜色。

我想在我的原始查询中包含连接,但我遇到了困难。查询:

TechTestEntities testTechObj = new TechTestEntities(); 
        var Result = from p in testTechObj.People 
        join fp in testTechObj.FavouriteColours on p.PersonId equals fp.PersonId 
        join c in testTechObj.Colours on fp.ColourId equals c.ColourId 
        select p; 

当我运行此我得到的错误“的实体类型FavouriteColours是不是该机型为当前上下文的一部分。”

我还增加FavouriteColours到模型中,像这样:

public virtual DbSet<FavouriteColours> FavouriteColours { get; set; } 

所有的表应该包含在ADO模型,所以我不知道问题是什么,以及如何检索颜色名称通过加入。

编辑:

型号代码

namespace techTest4 
     { 
     using System; 
     using System.Data.Entity; 
     using System.Data.Entity.Infrastructure; 
     using techTest4.Models; 

    public partial class TechTestEntities : DbContext 
    { 
     public TechTestEntities() 
      : base("name=TechTestEntities") 
     { 
     } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      throw new UnintentionalCodeFirstException(); 
     } 

     public virtual DbSet<Colour> Colours { get; set; } 
     public virtual DbSet<Person> People { get; set; } 
     //public virtual DbSet<FavouriteColours> FavouriteColours { get; set; } 
    } 
} 
+0

请包括任何类型“testTechObj”的类定义,以及您的“DbSet”定义的类 –

+0

“FavouriteColours”也在代码中注释过,您运行了吗? –

+0

我真的不明白你想在这里实现什么样的功能 - 你想从数据库中提取所有人吗? –

回答

1

我猜你的类是什么样子,但看看这个代码: (https://dotnetfiddle.net/TVqzse

这个片段是最对你有用:

var favoriteColours = people.SelectMany(p => p.FavouriteColours); 

foreach(var favoriteColour in favoriteColours) {  
    System.Console.WriteLine(favoriteColour.Color.ColorName); 
} 

Th是使用LINQ来提取所有人最喜欢的颜色,并且你应该能够在Entity Framework中完全相同。

+1

谢谢,我来看看! – peanut

+0

@ user3316147 - 不客气。查看这里查看更多LINQ查询示例:https://msdn.microsoft.com/en-us/library/jj573936(v=vs.113).aspx –