EF如何生成代理类

时间:2016-01-09 12:28:50

标签: c# entity-framework code-generation proxy-classes

我正在构建一个工作流引擎来包装我的服务层,并希望探索EF生成透明代理类所采用的方法,但我似乎无法从代码中找出GitHub / CodePlex实际上是如何工作的。

有人能指出我正确的方向/解释过程吗?

它是在运行时还是编译时执行此操作?

...

关键区别:

EF对属性感兴趣并跟踪对它们的更改,我感兴趣的是将方法调用包装到任何类型的实例,并使用一些逻辑调用我的工作流引擎来引发事件"。

1 个答案:

答案 0 :(得分:1)

好的,所以经过一番挖掘后,看起来它在编译时使用T4模板导出类型然后拦截基本上用运行时生成的代理类型替换原始对象的请求。

代码的关键部分......

T4模板在这里:

http://entityframework.codeplex.com/SourceControl/latest#src/PowerTools/CodeTemplates/ReverseEngineerCodeFirst/Entity.tt

拦截代码在这里:

http://entityframework.codeplex.com/SourceControl/latest#src/EntityFramework/Infrastructure/Interception/PropertyInterceptionContext.cs

简而言之,应该可以在我自己的代码中使用T4模板重现类似的行为,然后让我的服务工厂使用命名约定来查找代理类型。

非常干净,在这个上对M $赞不绝口:)