如何从实例化的POCO类中检索上下文?

时间:2013-01-31 17:08:42

标签: c# ef-code-first repository-pattern entity-framework-5

我正在使用Code-First以及Entity Framework 5Repository Pattern

我需要从一些扩展方法中获取上下文,以访问无法通过属性访问的其他实体。

示例:

public static class MyClassExtensions
{
    public static void DoSomething(this MyClass mClass)
    {
        // This is what I want to do
        // GetContextSomeWay() is what I need
        // GetRepository is method from my context
        mClass.GetContextSomeWay().GetRepository<SomeRepository>().Where(...);
    }
}

public class MyService
{
    public void DoSomethingOnService(int id)
    {
        MyContext ctx = new MyContext();
        MyClass cl = ctx.GetRepository<MyClass>().Single(c => c.Id == id);
        cl.DoSomething();
    }
}

我想到了两个解决方案。

  1. 将上下文作为参数传递给扩展方法
  2. 使用ObjectMaterialized事件
  3. 为每个实体设置上下文

    即使第一种方法没有太多麻烦,但我不能不认为这不是一个好习惯。

    除了为我的每个课程添加新属性的工作之外,我还想知道这是否会成为一个性能问题。这是过度关注,还是有效?

    这个问题还有其他解决办法吗?

1 个答案:

答案 0 :(得分:1)

添加Unity并将存储库放在那里可以提供解决方案。 你只有一个容器,你需要的东西, 充其量只是组成根。

然后您可以通过Unity容器访问它们。

这是一个非常好的教程,展示了所需的技术: Jason Dollinger on MVVM。 它主要是关于MVVM,但也显示了统一的用法。

源代码可在此处获得: MVVM Demo client source code

以下是有关这些的更多信息:

Unity

Composition Root