0

带有实体框架的 Asp.net MVC3 应用程序。假设我有 3 张桌子;文章、类别和作者。

我使用代码优先导航属性在 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 中的 Author 和 Category 表中返回 SelectLists,并使用相应的名称而不是 id 直接填充我的 Article 表中的 Category 和 Author 字段,并保持数据完整性。我的查询将被简化为:

return View(db.Article.ToList());

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

这是在某个地方完成的还是完全错误的?它的性能更好还是更差?

4

2 回答 2

1

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

于 2013-04-05T10:01:05.903 回答
0
public virtual Category Category { get; set; }
public virtual Author Author { get; set; }

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

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

于 2013-04-05T10:12:43.407 回答