首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架代码-优先-无法使用include检索嵌套对象

实体框架代码-优先-无法使用include检索嵌套对象
EN

Stack Overflow用户
提问于 2018-08-07 11:43:29
回答 1查看 243关注 0票数 1

我刚刚开始学习实体框架代码。我正在尝试使用.Include语法来获取相关对象。我已经能够成功地将对象从一对多关系中检索到列表中,但无法使其从多对一关系中工作。所以我有一首歌,它有一个相关的管弦乐队和一个相关的歌手

对象定义

代码语言:javascript
复制
public class Song
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    [ForeignKey("OrchestraId")]
    public Orchestra Orchestra { get; set; }
    public int OrchestraId { get; set; }
    [ForeignKey("SingerId")]
    public Singer Singer { get; set; }
    public int SingerId { get; set; }
    public int Genre { get; set; }
    public string Year { get; set; }

    public Song()
    {
        this.Orchestra = new Orchestra();
        this.Singer = new Singer();
    }
}

public class Singer
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Orchestra
{
    public int Id { get; set; }
    public string Name { get; set; }
}

我有一个上下文对象

代码语言:javascript
复制
public class POCContext : DbContext
{
    public DbSet<Singer> Singers { get; set; }
    public DbSet<Orchestra> Orchestras { get; set; }
    public DbSet<Song> Songs { get; set; }
}

我用来获得一首歌曲的代码如下

代码语言:javascript
复制
    public Song GetSong(int songId)
    {
        Song song = new Song();

        song = _context.Songs.Include(s => s.Orchestra)
            .Include(s => s.Singer)
            .Single(s => s.Id == songId);
        return song;
    }

当我在return语句上设置断点并查看歌曲时,填充了歌曲对象,但没有填充歌手或管弦乐队对象。

我看了一下下面的相关问题here,但我还没能找出我做错了什么。任何帮助都是非常感谢的。

致敬卡尔

EN

回答 1

Stack Overflow用户

发布于 2018-08-07 11:47:27

Orchestra和Singer应该是虚拟的。

代码语言:javascript
复制
public virtual Orchestra Orchestra { get; set; }

public virtual Singer Singer { get; set; }

下面是一个示例配置:

代码语言:javascript
复制
public class Song
{
    [Key]
    public Guid Id { get; set; }

    public string Title { get; set; }

    //navigation property
    public virtual List<Singer> Singers { get; set; }
}


public class Singer
{
    [Key]
    public int Id { get; set; }

    [ForeignKey("Song")]
    [Required]
    public string SongId { get; set; }

    [Required]
    public string Name { get; set; }

    //navigation property
    public virtual Song Song { get; set; }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51718526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档