我是 Entity Framework 4.0 的新手,在 C# 中使用它,目前正在试验它的功能。
我注意到的是,与大多数类似的 ORM 一样,它依赖于 Context 对象来处理在生成的实体上完成的数据操作和 CRUD 语句生成。
这意味着如果我想将更改保存回数据库,我总是需要能够访问对已实例化实体的 ObjectContext 的引用。
如果上下文是在可访问范围(例如,相同的方法)中创建的,那很好,但是如果我将实体或实体集传递给方法并希望此方法保存更改怎么办?看起来唯一简单的方法是将 ObjectContext 与参数一起传递。
另一种解决方案是将 ObjectContext 放在某种全局变量中。不用说,我发现这两种方法都存在样式和可维护性问题。
简而言之,我能想象的最好的方法是从实体或实体集中获取对 ObjectContext 的引用。我知道默认情况下这是不可能的。
我找到了一种显示添加扩展方法以从实体获取 ObjectContext 的方法。但是,它仅适用于具有关系的实体,并且根据作者的说法,调用此方法的成本很高。
我正在考虑修改 T4 模板以向我的所有实体添加一个 Context 属性,并在实体的实例化时自动填充它。
我已经修改过一次 T4 模板,让 Entity Framework 在我生成的类上强制执行 Max Length(按照 Julie Lerman 的 Programming Entity Framework 4 书)。到目前为止,我不能说我真的很喜欢 T4 语法,但如果这是最好/唯一的方法,那就这样吧……
有没有人已经这样做了?处理这个问题的最佳方法是什么,并愿意分享他的 T4 模板或解释什么是最好的部分方法或事件来完成这项工作?
使用这种方法有什么重大缺点吗?我在想,如果我的一些实体仍在范围内,那么对 ObjectContext 的这么多引用可能会阻碍/延迟它被 GC 重新收集的能力,但实际上我不再使用 ObjectContext。
非常感谢。