0

私のプロジェクトでは、EDMX を C# オブジェクトに変換するために「デフォルト」のコード生成戦略を使用しています。コードが生成される方法については何も変更したくありませんが、100,000 行に近い 1 つの大きなホンキン ムーサではなく、生成されたクラスごとに個別のファイルを生成する必要があります。それを達成する最も簡単な方法は何ですか?

編集:デフォルトのテンプレートをオンラインで見つけ、生成された出力が元のテンプレートと同じになるように少し調整しました。ここに投稿するにはコードが長すぎます。ここで見ることができます。ここで、生成されたすべてのクラスが独自の個別のファイルに作成されるように、どのような変更を加える必要があるかを知る必要があります。

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 に答える