Asp.net MVC 4 Code First从导航属性返回特定字段

时间:2012-10-21 20:59:38

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

已经坚持了一段时间所以我想我会问。我相信这里有一些简单的东西。尝试通过构建一个简单的应用程序来学习Asp.net mvc 4。

以下是模型:

public class Category
{
    public int Id { get; set; }
    [Required]
    [StringLength(32)]
    public string Name { get; set; }
    //public virtual ICollection<Note> Notes { get; set; }
    private ICollection<Note> notes;
    public ICollection<Note> Notes
    {
        get
        {
            return this.notes ?? (this.notes = new List<Note>());
        }
    }
}

public class Note
{
    public int Id { get; set; }
    [Required]
    public string Content { get; set; }
    [Required]
    [StringLength(128)]
    public string Topic { get; set; }
    public int CategoryId { get; set; }
    public virtual Category Category { get; set; }
    public virtual IEnumerable<Comment> Comments { get; set; }
    public virtual ICollection<Tag> Tags {get; set;}

    public Note()
    {
        Tags = new HashSet<Tag>();
    }
}
public class Tag
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Note> Notes { get; set; }

    public Tag()
    {
        Notes = new HashSet<Note>();
    }
}

我在控制器的存储库中调用此方法:

 public IQueryable<Note> GetAll()
    {
        var query = _db.Notes.Include(x => x.Category).Include(y => y.Tags);
        return query;
    }

在家庭控制器上,我试图返回所有笔记的列表,并希望包含它所属的类别名称以及随笔记一起使用的标记。起初没有显示,所以我阅读了一些关于热切加载的教程,并想出如何让它们展示。

但是,我的方法效率不高。由于类别和标签的导航属性再次为笔记发送查询,因此迷你分析器对我来说是重复查询。有没有办法只返回我需要的类别和标签对象的属性?

我尝试了几种没有运气的方法。我希望我能做到这样的事情:

var query = _db.Notes.Include(x => x.Category.Name).Include(y => y.Tags.Name);

但是我收到一个错误:无法将lambda表达式转换为'string'类型,因为它不是委托类型

我之前看到的错误是由于某些缺少使用语句引起的,所以我已经仔细检查过了。

有什么建议吗?谢谢你的帮助

0 个答案:

没有答案