如何使用每个对象单独文件的EF默认代码生成策略?

时间:2013-06-04 13:34:51

标签: c# entity-framework-5

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

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

1 个答案:

答案 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