0

我正在开发一个 MVC4/EF5 项目,我真的很想在我的应用程序设计上投入大量时间。

我为自己制定了一项政策/原则。我的控制器需要专用,这意味着它们只能与一个特定的 repo 交互。

例如(我只是在写一些伪代码)

对象:用户、博客、帖子、评论

UserController -> UserRepo -> 处理用户对象

BlogController -> BlogRepo -> 处理博客对象

ETC...

现在我正在研究以下困境。使用 EF5 向数据库创建/添加新对象的性能最高的是什么。

第一种方法:向用户添加功能以添加博客或添加帖子。

addBlog(Blog b){this.Blog.addBlog(b);}

addPost(int blogid, Post p){this.Blog(b).addPost(p);}

对我来说,这意味着每篇文章都会启动一个用户控制器,注入一个用户存储库,并将在用户表中进行读取操作以获取对象。然后它将执行 addPost 函数并保存更改。

第二种方法:给 Blog 和 Post 对象一些外键 id

Blog property: UserId

Post property: UserId, BlogId

这意味着无论何时创建博客,都会启动博客控制器,注入 blogrepo 并且不需要“查找”。控制器只会将新的 Blog 对象添加到上下文中。(UserId 属性是从 websecurity 上下文中设置的)

这也意味着无论何时创建一个帖子,都会启动一个 postcontroller,一个 postrepo 将被注入,并且不需要“LOOKUP”。控制器只会添加带有注入的 UserId 和 BlogId 的新 Post 对象。(这是控制器动作的参数)

对我来说,第二种方法似乎将负载分配到不同的表而不是一个表上。但是这种方法的缺点是你不能真正进行模型测试。因为将没有函数 addBlog 到要测试的 User 对象。

我的问题有点清楚吗?我真的很想为我的应用程序构建性能最高的框架。另外,具有以下属性的用户对象的影响是什么。

虚拟 ICollection 虚拟 IColleciton

它们都可以通过获取 User 对象来检索。(然后对虚拟对象进行延迟加载)

还是让专用的 BlogController 索引属于某个用户 id 的博客更好。

非常感谢所有的建议和评论!

4

1 回答 1

0

在使用 SQL Profiler 调查创建的实体框架语句后,我得出的结论是,如何创建新对象并不重要。

将新对象直接添加到存储库会创建与通过另一个对象的集合添加对象时相同的插入语句。

公共类博客
{
公共 int Id { 获取;放; }
公共虚拟 ICollection 文章 { 获取;放; }
}

公共类文章
{
public int Id { 获取;放; }
}

于 2013-07-18T12:09:51.923 回答