我有一个实体类,它是从我的数据库模型自动生成的。该类继承了 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;
}
从这里您可以看到我对数据库实例进行了多次引用。我的问题是,我是否更好地在每个方法中实例化一个新的 DevEntity,从而能够实现 using 语句,从而确保正确处理,或者我当前的实现是否正常?
最佳答案
我也会在 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
后处理它。
关于c# - 在 Entity Framework 4 中处理对象上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4579056/