自定义EF4 Model 代码生成
在VS2010中EF4提供了三种代码生成方式:EntityObject,POCO,Self-Tacking。默认VS2010只带有EntityObject模板,可以通过浏览Online Templates中的项目将剩余的两种添加到本地模板文件中来。三种代码模板都
是通过T4模板引擎来实现的,因此通过分析一下模板文件我们也能够实现自己的代码生成器。
在项目中添加一个模板文件,打开.tt的文件,在文件的头部会有一行代
码<#@ include file="EF.include"#>,
EF.include是一个非常有用的文件,主要是用来分析edmx文件
和生成模型代码的,要实现自己的代码生成器首先得到这个文件,通过搜索
这个文件放置在:\Program Files\Microsoft Visual Studio
10.0\Common7\IDE\Extensions\Microsoft\Entity Framework
Tools\Templates\Includes目录。用VS打开这个文件发现它其实就是个代码
文件。新建一个Project将文件中的CS代码copy到一个新的CodeGenerationTools类中,引用必要的Assembly和Namespace就可以了。在
本文附件中到两个Dll:
Microsoft.VisualStudio.TextTemplating.10.0.dll和
Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll 这两个dll
是T4模板的引擎,具体的使用在网上有很多介绍这里就不再赘述了。在项目中添加EntityObject,POCO,Self-Tacking三个模板文件,将默认文件名改成对应的模板名称,这样便于区分。在添加模板文件的时候IDE可能会出现很多
Error信息,直接跳过可以了。在出错信息中会有个错误信息说需要用实际的edmx文件路径替换掉 $edmxInputFile$ 。这个地方就是后面我们需要修改的
地方。选择tt模板文件在文件属性中将Customer Tool里面的内容清空,这样IDE就不会自动生成不必要的cs文件也不会提示错误了。在项目文件中新增一
个新类EntityFrameworkTemplateHost实现ITextTemplatingEngineHost接口。这类将来主要负责传递一些配置信息。具体的代码可以在附件中到这里面就
不贴了,网上关于T4模板介绍的中都有其使用介绍。
完成这些就需要对模板文件和CodeGenerationTools中的内容做一些调整。首先是修改每个模板文件在在每个模板的头中添加必要的名称空间引用,
如果后面的执行中出现类型不到就是在这里没有添加必要的名称空间了。在
模板文件中到带有$edmxInputFile$文本的哪行,将其替换为:
EntityFrameworkTemplateHost host =
(EntityFrameworkTemplateHost)(Host);
string inputFile = host.EDMXFile;//EDMXFile是EntityFrameworkTemplateHost定义的一个属性由外部传入。
打开CodeGenerationTools文件,去掉EnvDTE引用,因为这个是在IDE环境中用到的,这里我们不需要和IDE交互所以可以完全移除了。这个过程比较简单,
根据编译错误可以很容易调整过了,这里限于篇幅限制就不详细介绍了。最后的调用代码可能是这样:
Engine engine = new Engine();免费模板生成器
整个过程其实比较简单的,就不放完整的代码了,动动手有益健康。附件
Tag标签: EF4
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论