更改表之间的关系以简化MVC3中的数据访问

时间:2013-04-05 09:51:33

标签: asp.net-mvc

带有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());

我想我必须为这些字段创建索引以加快搜索速度。

这是在某处完成还是完全错误? 是否有更好或更差的表现?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

您将类别和作者定义为虚拟,这意味着如果查询中没有包含命令,这些对象将无法加载。你在网格中使用选择列表而不删除这些关系,因为在查询中没有包含命令,这些关系没有任何实际负载。

但要注意使用.ToList()这将加载查询的所有记录,之后它可能会变成大量数据。