1

みんなは、MS SQL Server データベースからデータを取得するためのリポジトリ パターンを既に使用している Asp.Net MVC プロジェクトに取り組んでいます。

私は現在、古いリポジトリ ロジックを乱すことなく、プロジェクトのいくつかの新しい特定の要件に Entity Framework を使用するつもりです。EF Power ツール ベータ 3 を使用し、Visual Studio からデータベース テーブルをリバース エンジニアリングしましたが、生成されたクラスは、データベース内の対応するテーブルと同じ名前を持つ既存のリポジトリ クラスの一部と競合し、プロジェクトをコンパイルできません。私はこのチュートリアルを見てきました

ただし、これは、テーブル名に「tbl」プレフィックスを追加し、生成されたクラス名を変更しないことを示しています。私自身は、テンプレートで生成されたクラス名を変更しようとしました(CodeTemplates\ReverseEngineerCodeFirstの下にありますが、それでも競合して生成されています.

私の質問は、意図した結果を達成するために何をすべきか(プロジェクト内の既存のクラスと競合しない)、または他の代替手段を完全に採用する必要がありますか? 助けてくれてありがとう。

4

2 に答える 2

1

あなたが求めていることをツールに実行させることについてはわかりませんが、生成されたファイルの名前空間を変更して、重複した名前が問題にならないようにするのはどうですか?

于 2013-03-15T17:19:21.110 に答える
0

@jlewの提案を考慮して、回避策を見つけました。はい、クリックしました。

ここにあります:

最初に、次のリンクからダウンロードしたカスタマイズされたテンプレートによって、「CodeTemplates/ReverseEngineerCodeFirst」フォルダーの下に生成されたデフォルトのテンプレートを上書きしました。

http://romiller.com/2012/05/09/customizing-reverse-engineer-code-first-in-the-ef-power-tools/

(注:これは、Fluent APIではなくデータ注釈を構成に使用するために行われ、列とテーブルのマッピングはデータ注釈を使用して行われます。詳細については、上記のリンクを参照してください)。

それから私は次のことをしました:

  1. Context.ttファイルが置き換えられました

    using <#= code.EscapeNamespace(efHost.MappingNamespace) #>;
    
    namespace <#= code.EscapeNamespace(efHost.Namespace) #>
    

<#
    var hostMapNamespace = code.EscapeNamespace(efHost.MappingNamespace);
    hostMapNamespace = hostMapNamespace.Replace(".Models", ".ModelsEF");

    var hostNamespace = code.EscapeNamespace(efHost.Namespace);
    hostNamespace = hostNamespace.Replace(".Models", ".ModelsEF");
#>
using <#= hostMapNamespace #>;

namespace <#= hostNamespace #>

2-Entity.ttファイルが置き換えられました

    namespace <#= code.EscapeNamespace(efHost.Namespace) #>

<#
    var hostNamespace = code.EscapeNamespace(efHost.Namespace);
    hostNamespace = hostNamespace.Replace(".Models", ".ModelsEF");
#>
namespace <#= hostNamespace #>

3-Mapping.ttファイルが置き換えられました

    namespace <#= code.EscapeNamespace(efHost.Namespace) #>

<#
    var hostMapNamespace = code.EscapeNamespace(efHost.Namespace);
    hostMapNamespace = hostMapNamespace.Replace(".Models", ".ModelsEF");
#>
namespace <#= hostMapNamespace #>

つまり、特にModels名前空間でのプロジェクトの既存のクラスとの競合を回避するために、カスタムテンプレートでの名前空間の生成を多少変更しました。良いことは...それはうまくいく!

于 2013-03-15T22:16:19.700 に答える