如何从实例化的 POCO 类中检索上下文
本文关键字:检索 上下文 POCO 实例化 | 更新日期: 2023-09-27 17:56:56
我正在使用Code-First
以及Entity Framework 5
和Repository 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();
}
}
我想到了两个解决方案。
- 将上下文作为参数传递给扩展方法
- 使用
ObjectMaterialized
事件为每个实体设置上下文
尽管第一种方法可以毫不费力地工作,但我不能停止认为这不是一个好的做法。
对于第二个,除了为每个类添加新属性的工作之外,我想知道这是否会成为性能问题。这是过度关注,还是有效?
这个问题还有其他解决方案吗?
添加 Unity 并将存储库放置在那里可以有一个解决方案。你只有一个容器,里面有你需要的东西,充其量是在组合根。
然后,您可以通过 Unity 容器访问它们。
这是一个非常好的教程,展示了所需的技术:杰森·多林格在MVVM上。它主要是关于 MVVM,但也显示了 Unity 的用法。
源代码可在此处获得:MVVM 演示客户端源代码
以下是有关这些的更多信息:
统一
组成根