2013-04-05 57 views
0

Asp.net MVC3应用程序数据访问。可以说我有3张桌子;文章,类别和作者。变化的关系,以简化在MVC3与实体框架

创建 Category.CategoryId之间的关系 - > Article.CategoryId和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()); 

我想我将不得不为那些领域,以加快搜索索引。

这是能在别处做或者是完全错误的? 它有更好或更差的表现吗?

回答

1

@Panos,你原来的做法是正确的,删除​​外键将是一个错误。使用includes可以避免在这种情况下的延迟加载,并且你有很好的性能。

0
public virtual Category Category { get; set; } 
public virtual Author Author { get; set; } 

您将类别和作者定义为虚拟,这意味着这些对象在查询中不包含Include命令时不会加载。你的人在你的网格中使用一个选择列表而不删除这些关系,因为这些关系在你的查询中没有包含命令的情况下没有任何实际负载。

但要注意使用.ToList(),这将载入您的查询的所有记录以后就有可能成为大数据量。

+0

其相反的,如果标记字段作为虚拟您可以使用延迟加载 – 2013-04-05 10:14:56

+0

是,你能延迟加载虚拟对象使用包括命令和不包含命令的虚拟对象将不会加载。 – Rabolf 2013-04-05 12:10:40