在entity framework中处置对象上下文4

我有一个实体类,它是从我的数据库模型自动生成的。 该类inheritance了ObjectContext,它inheritance了IDisposable。

我创建了一个存储库,其中包含各种方法,这些方法使用实体对象的单个实例与数据库进行交互。

自动生成的类

public partial class DevEntities : ObjectContext { public const string ConnectionString = "name=DevEntities"; public const string ContainerName = "DevEntities"; 

存储库类

 DevEntities db = new DevEntities(); public Customer GetCustomerByID(int id) { var customers = db.Customers.FirstOrDefault(c => c.CustomerId == id); return customers; } public Customer GetCustomerByPasswordUsername(string email, string password) { var customers = db.Customers.FirstOrDefault(c => c.Email == email && c.Password == password); return customers; } 

从中您可以看到我对db实例进行了多次引用。 我的问题是,我是否更好地在每个方法中实例化一个新的DevEntity,从而能够实现using语句,从而确保正确处理,或者我当前的实现是否正常?

我也会在Repository类上实现IDisposable ,因此它可以处理ObjectContext 。 如果每次都返回一个不同的ObjectContext,那么在这些对象之间进行查询时会遇到问题,因为这些对象会附加到不同的ObjectContext ,这将导致exception。

定义:

 public class Repository : IDisposable { DevEntities db = new DevEntities(); public Customer GetCustomerByID(int id) { var customers = db.Customers.FirstOrDefault(c => c.CustomerId == id); return customers; } public Customer GetCustomerByPasswordUsername(string email, string password) { var customers = db.Customers.FirstOrDefault(c => c.Email == email && c.Password == password); return customers; } public void Dispose() { db.Dispose(); } } 

用法:

 using(Repository r = new Repository()) { //do stuff with your repository } 

这样做,您的存储库会在您使用它之后处理ObjectContext