3

私のクライアントには、すべてのテーブルにアプリケーション固有のプレフィックス (「myapp_」など) を付ける必要がある db テーブルの命名規則があります。モデルの最初のアプローチで EF4 を使用しています。

カスタム db 名前空間を指定できますが、彼らはこのアプリに新しい名前空間を導入したくありません。他のアプリは dbo 以外の名前空間を使用していません。

私は t4 テンプレートをカスタマイズする道をたどりましたが、実行時に EF が必要とする 3 つのメタデータ ファイルを生成するときに、ワークフローがどの t4 テンプレートを使用する必要があるかを指定できませんでした。

EF を使用してテーブル プレフィックスの要件を達成するための推奨される方法はありますか?

4

2 に答える 2

1

CS マッピングと SSDL コンテンツをいくつか変更する代わりに、SSDL コンテンツの EntitySet に Table 属性を追加することもできます。これははるかに簡単です。次のようになります。

<EntitySet Name="Tests" EntityType="Test.Store.Tests" store:Type="Tables" Schema="dbo" *Table="Prefix_Tests"* />
于 2010-12-02T15:25:30.133 に答える
0

データベース生成ワークフローが使用する edmx ファイルを生成するためのテンプレートがあるかどうかはわかりませんが、DDL 生成用のテンプレートを使用していることは間違いありません。これは次のパスにあります:
<Program Files>\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen
このフォルダー内SSDLToSQL10.ttで、VS2010 が認識できるようにするには、このファイルを手動でコピーして同じフォルダーに貼り付ける必要があります。その後、テーブルのプレフィックスとして変更およびカスタマイズできます。 DB命名規則に基づく名前。T4 テンプレート内で、次のコードを探します。

foreach (EntitySet entitySet in Store.GetAllEntitySets())
           {
               string schemaName = Id(entitySet.GetSchemaName());
               string tableName = Id(entitySet.GetTableName());
               ...

テーブル名を変更して、カスタム プレフィックスを付けることができます。T4 内には上記のコードを持つ 3 つの場所があり、プレフィックスを適用する必要があります。完了したら、ファイルを保存して閉じ、VS 内の EDM に戻ります。DDL Generation Template プロパティをドロップダウンすると、コピーして変更した新しい T4 ファイルが使用可能なオプションであることがわかります。それを選択すると、モデルからデータベースを生成するときに、テーブル名にプレフィックスが付いていることがわかります。

したがって、テンプレートを変更して、DDL の構築方法をカスタマイズすることができます。難しい問題があります。ワークフローは、変更された T4 を使用して、ストレージおよびマッピング定義 (SSDL および MSL) の edmx ファイルを変更しません。そのため、データベースが正しく作成されていても、edmx は元のテーブル名を指しています。

したがって、XML エディターで edmx を開き、CS マッピング (MSL) と SSDL の内容を手動で変更してプレフィックスを付ける必要があります。そのためには、マッピングでStoreEntitySetを変更し、SSDL コンテンツで EntitySet の名前を変更するだけです。

于 2010-10-15T00:22:25.187 に答える