实体框架查询加入问题

时间:2017-05-04 23:20:21

标签: asp.net sql-server asp.net-mvc entity-framework join

我正在使用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; }
    }
}

1 个答案:

答案 0 :(得分:1)

我不得不猜测你的课程是什么样子,但看看这段代码: (https://dotnetfiddle.net/TVqzse

这个片段对您来说最有趣:

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

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

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