已经坚持了一段时间所以我想我会问。我相信这里有一些简单的东西。尝试通过构建一个简单的应用程序来学习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'类型,因为它不是委托类型
我之前看到的错误是由于某些缺少使用语句引起的,所以我已经仔细检查过了。
有什么建议吗?谢谢你的帮助