我想每次都使用实体框架上下文对象。在 asp.net 中定义的更好方法是什么?
前任:
using(employeeEntities context = new employeeEntities ())
{
}
我想在任何地方都使用这个上下文而不重用using
我想每次都使用实体框架上下文对象。在 asp.net 中定义的更好方法是什么?
前任:
using(employeeEntities context = new employeeEntities ())
{
}
我想在任何地方都使用这个上下文而不重用using
虽然您可以这样做,但微软建议以不同的方式使用上下文,请查看文档:
...
The lifetime of the ObjectContext begins when the instance is created and ends when the instance is either disposed or garbage-collected. Use using if you want all the resources that the context controls to be disposed at the end of the block. When you use using, the compiler creates a try/finally block and calls dispose in the finally block. Here are some general guidelines when deciding on the lifetime of the object context:
1. When working with long-running object context consider the following:
- As you load more objects and their references into memory, the object
context may grow quickly in memory consumption. This may cause
performance issues.
- Remember to dispose of the context when it is no longer required.
- If an exception caused the object context to be in an unrecoverable
state, the whole application may terminate.
- The chances of running into concurrency-related issues increase as
the gap between the time when the data is queried and updated grows.
2. When working with Web applications, **use an object context instance per request**...
3. When working with Windows Presentation Foundation (WPF) or Windows Forms, use an object context instance per form. This lets you use change tracking functionality that object context provides.
...
另外看看这个相关的线程:一个 DbContext per web request...为什么?
如果你只是想要一些语法糖来避免使用using
但仍然每次都创建一个新的上下文,你可以编写一些扩展方法来帮助你编写如下代码:
// Execute is the extension method which takes the code
// in the using block as a delegate
SomeEntities.Execute(context =>
context.SomeTable.Where(item => item.Ammount > 100));
如果这是你想要的,我可以分享你的代码。如果您想一直使用单个上下文,请参阅 CloudyMarble 的答案。