0

我的项目使用“默认”代码生成策略将我的 EDMX 转换为 C# 对象。我不想更改代码生成方式的任何内容,除了我想为每个生成的类生成一个单独的文件,而不是一个接近 100,000 行的大 honkin' mutha。实现这一目标的最简单方法是什么?

编辑:在线找到默认模板,对其进行了一些调整,以便生成的输出与原始输出相同。代码太长,无法在此处发布;你可以在这里查看;现在我需要知道要对其进行哪些修改,以便每个生成的类都在其自己的单独文件中创建。

4

1 回答 1

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 生成器,可在此处找到

于 2013-06-04T14:00:16.770 回答