带有Entity框架的Asp.net MVC3应用程序。可以说我有3张桌子;文章,类别和作者。
我之间建立关系 Category.CategoryId - > Article.CategoryId and Author.AuthorId - > Article.AuthorId 使用代码第一个导航属性
public virtual Category Category { get; set; }
public virtual Author Author { get; set; }
这意味着当我查看我必须的文章列表时:
return View(db.Article
.Include(c=>c.Category)
.Include(a=>a.Author)
.ToList());
为了能够访问类别和作者的名称,而不仅仅是他们的id
打破这个经典架构而不创建这些表之间的关系会有多大麻烦?然后我可以从ViewModel中的作者和类别表中返回SelectLists,并直接使用相应的名称而不是id来填充我的Article表中的Category和Author字段,并保留数据完整性。 我的查询将简化为:
return View(db.Article.ToList());
我想我必须为这些字段创建索引以加快搜索速度。
这是在某处完成还是完全错误? 是否有更好或更差的表现?
答案 0 :(得分:1)
@Panos,你的原始方法是正确的,删除外键将是一个错误。使用包含可以避免在这种情况下延迟加载,并且性能良好。
答案 1 :(得分:0)
public virtual Category Category { get; set; }
public virtual Author Author { get; set; }
您将类别和作者定义为虚拟,这意味着如果查询中没有包含命令,这些对象将无法加载。你在网格中使用选择列表而不删除这些关系,因为在查询中没有包含命令,这些关系没有任何实际负载。
但要注意使用.ToList()这将加载查询的所有记录,之后它可能会变成大量数据。