Linq和EF:查询以获得一对多关系的结果:选择具有外键的表

时间:2012-08-03 00:13:01

标签: asp.net-mvc linq entity-framework

我正在盯着Linq,无法弄清楚如何处理这个查询。

我有一个UserProfile表。 每个UserProfile都可以有许多图像(UserImages表)

我的模型(简化):

    public class UserProfile
{
    [Key]
    public int Id { get; set; }
    public string Name  { get; set; }
    public ICollection<Image> UsrImages { get; set; }
}

[Table("ImagesLocation")]
public class UserImages
{   //This is just an Id (and I don't even need it) It is not, from 
    public int Id { get; set; } what I can see, the UserProfile Id foreign key
    public string ImgPath { get; set; }
    public bool? ImgDefault { get; set; }
}

     public class UserProfileDBContext : DbContext
{
public DbSet<UserProfile> UserProfiles { get; set; }
public DbSet<UserImages> userImages { get; set; }
 }

我想要一个类似于:

的linq查询
select * from dbo.imgLocation where userProfile_id = 1 (or any user id)

这将为某个用户带来包含所有“图像”(或图像数据/路径)的列表。 我看到EF在UserImages表上自动创建了一个名为userProfile_id的列,但我无法使用linq查询它,因为它不存在!

我一直在谷歌上搜索它,但我无法到达任何地方(添加我尝试的内容没有意义!... 最终,我可以改变我的模型来完成这项工作。我的主要问题是我在UserImages模型上找不到与UserProfile相关的密钥/外键

有关如何操作的任何提示? 谢谢!... 即插即用

1 个答案:

答案 0 :(得分:1)

为了访问该列,您需要声明标量属性和匹配的导航属性,以便EF可以按照约定检测关系的两端。

[Table("ImagesLocation")]
public class UserImages
{   
    public int Id { get; set; }

    public int UserProfileId { get; set; }
    public virtual UserProfile UserProfile { get; set; }

    public string ImgPath { get; set; }
    public bool? ImgDefault { get; set; }
}

然后您可以通过

查询图像
var images = db.userImages.Where(i => i.UserProfileId == 1);