3
|
Mark Carpenter · 技术社区 · 15 年前 |
![]() |
1
6
ObjectContext是指“工作单元”。 本质上,这意味着对于每个“操作”(例如:每个网页请求),都应该有一个新的ObjectContext实例。在该操作中,应重新使用相同的ObjectContext。 当您考虑它时,这是有意义的,因为事务和变更提交都与ObjectContext实例相关联。 如果您不是在编写Web应用程序,而是在编写WPF或Windows窗体应用程序,它会变得更加复杂,因为您没有Web页面加载给您的严格“请求”范围,但是您得到了这个想法。 ps:在您的任一示例中,objectcontext的生存期要么是全局的,要么是暂时的。在这两种情况下,它不应该存在于dataaccess类中-它应该作为依赖项传入 |
![]() |
2
1
如果您保持相同的上下文 长期运行 进程运行 大量查询 与之相反,linq to sql(我没有对linq to实体进行测试,但我想这是同一个问题)的速度非常慢(大约1000个简单查询之后,每秒1个查询)。定期更新上下文可以解决这个问题,而且成本也不高。 结果是上下文会跟踪你对它所做的每一个查询,所以如果不以某种方式重置它,它会变得很胖…另一个问题是它需要的内存。 因此,这主要取决于应用程序的工作方式,以及您是否定期新建一个数据访问实例,或者是否一直保持不变。 希望这有帮助。 斯塔芬 |
![]() |
3
0
只是一个简短的说明——这两个代码片段在其基础问题上大致相同。这是我一直在关注的问题,因为您不想一直打开和关闭上下文(参见第二个示例),同时您不确定是否可以信任Microsoft为您正确地处理上下文。 我所做的一件事是创建一个普通的基类,它懒惰地将上下文加载到中,并实现基类析构函数来处理事情。这对于类似MVC框架的东西很有效,但不幸的是,这导致了必须将上下文传递到各个层,以便业务对象可以共享调用的问题。 最后,我使用ninject将这个依赖项注入到每个层,并让它跟踪使用情况。 |
![]() |
4
0
虽然我不赞成每次需要复杂的对象时总是创建它们,但我也发现Linq to SQL中的数据上下文和EF中的对象上下文在需要时是最好的。 这两种方法都基于运行它们所使用的模型执行了大量静态初始化,这些模型被缓存用于后续调用,因此您会发现上下文的初始启动时间比所有后续实例化时间都长。 您面临的最大障碍是,一旦您从上下文中获取了一个实体,就不能简单地将其传递回另一个实体来执行更新操作,或将相关实体添加回。在EF中,可以将实体重新附加回新的上下文。在L2S中,这个过程几乎是不可能的。 |
![]() |
slik · iOS数据访问层和数据访问层的神奇记录处理 10 年前 |
![]() |
RacerNerd · 如何在DNN 7+中使用DAL2复合密钥? 11 年前 |
|
sakir · 为什么我们要在解决方案中添加解决方案文件夹和责任共享测试文件夹 11 年前 |
![]() |
ZedBee · 把一个软件分成多个模块,每个模块都有自己的数据库,这样更好吗 11 年前 |