我的项目使用“默认”代码生成策略将我的 EDMX 转换为 C# 对象。我不想更改代码生成方式的任何内容,除了我想为每个生成的类生成一个单独的文件,而不是一个接近 100,000 行的大 honkin' mutha。实现这一目标的最简单方法是什么?
编辑:在线找到默认模板,对其进行了一些调整,以便生成的输出与原始输出相同。代码太长,无法在此处发布;你可以在这里查看;现在我需要知道要对其进行哪些修改,以便每个生成的类都在其自己的单独文件中创建。
我的项目使用“默认”代码生成策略将我的 EDMX 转换为 C# 对象。我不想更改代码生成方式的任何内容,除了我想为每个生成的类生成一个单独的文件,而不是一个接近 100,000 行的大 honkin' mutha。实现这一目标的最简单方法是什么?
编辑:在线找到默认模板,对其进行了一些调整,以便生成的输出与原始输出相同。代码太长,无法在此处发布;你可以在这里查看;现在我需要知道要对其进行哪些修改,以便每个生成的类都在其自己的单独文件中创建。
如果您可以访问该 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 生成器,可在此处找到。