0

我需要在我的 EF 4 STE 公共 getter 和 setter 中执行一些自定义逻辑。但是,我只希望在 EF 当前未对实体进行水合时执行此自定义逻辑。

是否有任何内置标志、状态或对象状态可以检查以确定 EF 当前是否代表我在为 STE 实体进行水合?

我没有进行延迟加载,因此我们一次性执行所有数据加载。我希望我不必更改 Entity T4 模板来添加基础设施来自己跟踪这些东西。

谢谢,内特

4

1 回答 1

0

不,没有这样的标志,但你可以尝试这样做:

  • 使用方法 SavingStarted、SavingFinished 为所有 STE 定义接口
  • 在 STE 模板中实现这些方法,以便能够打开和关闭您的标志
  • 修改 STE 模板中的 getter 和 setter 定义以使用标志
  • 覆盖 ObjectContext 上的 SaveChanges。
  • 遍历可转换为您的界面的已修改实体并调用 SavingStarted
  • 调用 base.SaveChanges
  • 再次遍历该实体并调用 SavingFinished

唯一的问题是这些方法将成为 STE 的公共接口的一部分。为避免这种情况,您可以在 ObjectContext 中实现这些方法并使用标志访问 STE 的内部属性。只有当 STE 和 ObjectContext 在同一个程序集中或使用 InternalsVisibleTo 时,这才有可能。

于 2011-01-11T09:23:36.357 回答