我的项目使用“默认”代码生成策略将我的EDMX转换为C#对象。 我不想改变代码生成方式的任何内容,除了我想为每个生成的类生成一个单独的文件,而不是一个接近100,000行的一个大的honkin'momha。 实现这一目标的最简单方法是什么?
编辑:在线找到默认模板,对其进行了一些调整,以便生成的输出与原始输出相同。代码太长了,无法在此发布;你可以view it here;现在我需要知道对它做了哪些修改,以便每个生成的类都在它自己的单独文件中创建。
答案 0 :(得分:1)
如果您可以访问该EDMX后面的.tt代码生成模板,那么您可以将其设置为每个实体开始一个新文件,如下所示:
foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
fileManager.StartNewFile(entity.Name + ".cs");
BeginNamespace(code);
#>
(rest of class generation code here...)
因此创建了fileManager
:
var fileManager = EntityFrameworkTemplateFileManager.Create(this);
和BeginNamespace
应该在模板的下方;如果你错过它,那么它看起来像这样:
public void BeginNamespace(CodeGenerationTools code)
{
var codeNamespace = code.VsNamespaceSuggestion();
if (!String.IsNullOrEmpty(codeNamespace))
{
#>
namespace <#=code.EscapeNamespace(codeNamespace)#>
{
<#+
PushIndent(" ");
}
}
public void EndNamespace(CodeGenerationTools code)
{
if (!String.IsNullOrEmpty(code.VsNamespaceSuggestion()))
{
PopIndent();
#>
}
<#+
}
}
作为参考,这来自标准的EF5 DbContext生成器,can be found here。