我有一个从我的数据库模型自动生成的实体类。该类继承了ObjectContext,它继承了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语句,从而确保正确处理,或者我当前的实现是否正常?
答案 0 :(得分:9)
我也会在Repository类上实现IDisposable
,因此它可以处理ObjectContext
。如果每次都返回一个不同的ObjectContext,那么在这些对象之间进行查询时会遇到问题,因为这些对象会附加到不同的ObjectContext
,这将导致异常。
定义:
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
。