c# - 在 Entity Framework 4 中处理对象上下文

标签 c# entity-framework-4 repository-pattern idisposable

我有一个实体类,它是从我的数据库模型自动生成的。该类继承了 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/

相关文章:

c# - 在 Silverlight 中的运行时创建一个 ControlTemplate

entity-framework - EF4 和 MVC3 - 我需要存储库模式吗?

linq - 如何使用 LINQ/EF 中的有序查询从我的存储库中返回 IList

c# - .NET DateTimePicker 中的毫秒值

c# - 从 C# 控制台应用程序使用 Edge.js

c# - 这种循环依赖是一件坏事吗?有什么潜在的问题吗?

c# - 带有语句体的 lambda 表达式无法在 nopCommerce 中转换为表达式树

silverlight - 向 Silverlight 公开 Entity Framework ENTITY 类?

c# - 没有配置文件的 Entity Framework 跟踪提供程序包装器

mvvm - 在 MVVM 中,长期运行的业务操作在哪里处理?