1

我在使用 EF5 的上下文中遇到了一些问题。我仍在研究这个问题,但我认为用单例模式实现我的 DataContext 类是一个好主意,以便让不同的实体存储库使用相同的对象。是自杀还是有意义?另一个想法是在这里实现一个 ContextManager:http: //www.codeproject.com/Articles/70061/Architecture-Guide-ASP-NET-MVC-Framework-N-tier-En(但我仍在检查他的代码和我还没有真正深入了解它)。

你怎么看?

- 编辑 -

在 Web 应用程序中,我正在为我必须管理的每个实体实现一个存储库

public DataContext : DbContext
{
    //...
}

解决方案 1:很好,但是如果我需要在一次调用中执行多个操作,即插入和删除,我想我将对 db 进行两次调用。

public Entity1Repository
{
    public void Add(Entity1 entity)
    {
        using(DataContext context = new DataContext())
        {
            context.Entity1.Add(entity);
            context.SaveChanges();
        }
    }
    public void Delete(Entity1 entity)
    {
        using(DataContext context = new DataContext())
        {
            context.Entity1.Remove(entity);
            context.SaveChanges();
        }
    }
}

解决方案 2:在这种情况下,我想我只会调用一次 db,但我需要记住调用 Dispose()

public Entity1Repository
{
    private DataContext context;

    public void Add(Entity1 entity)
    {
        context.Entity1.Add(entity);
    }

    public void Save() 
    {
        context.SaveChanges();
    }

    public void Dispose()
    {
        context.Dispose();
    }
}

哪个是最好的实现?(如果我理解正确,单身不是一个好人)

4

1 回答 1

0

我建议您通过构造函数注入(依赖注入)共享您的 dbcontext。

然后,我将使用 IoC 将上下文注入容器中,每个请求具有生命周期。因此,为您的 Web 中的每个请求创建 dbcontext,并在该请求期间与每个存储库共享,然后在请求后处理。

Mark seemann 有一本关于依赖注入和示例的好书。 http://www.manning.com/seemann/

希望这可以帮助您入门。

于 2013-04-28T13:14:21.050 回答