2011-11-15 10 views
3

ContactsCallsContactTypesなどモデルのDBを生成すると、同じ名前のテーブル名が取得されます。EF4のエンティティとは異なるテーブル名を指定する方法は?

は、どのように私は、接頭辞ab_Contactsでテーブル名を設定しab_Callsなどがまだ生成されたコードでContactsCallsとしての実体を残すでしょうか?

.edmxファイルでこれを指定する方法を見つけることができませんでした。あなたのコンテキストで

答えて

2

から取られました。最初のモデルは、データベースに要件がないシナリオ用です。

この動作を変更するには、EDMXのSSDL部分の生成プロセスを変更する必要があります(これは、デザイナにSQLを生成するように要求すると作成されます)。デフォルトでは、このプロセスはワークフロー(%VSINSTALLDIR%\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen\TablePerTypeStrategy.xaml)によって処理されるか、Database Generation Power PackをインストールするとT4テンプレートで処理されます。カスタム命名規則を使用するには、ワークフロー(カスタム生成コンポーネントを実装する)またはT4テンプレートのいずれかを変更する必要があります。

編集:

OK。正しい方法を指すだけで十分だと信じても、答えを完成させるために自分で試してみることにしました。

Database Generation Power Packをインストールすると、上記のパスに新しいテンプレートセットとワークフローがインストールされます。ワークフローの1つはGenerate T-SQL Via T4 (TPT).xamlです。このワークフローと元のTablePerTypeStrategy.xamlの違いは、これが外部T4テンプレートを使用してSSDLとMSLを生成していることです。あなたがする必要があるのは、このワークフローのコピーを作成し、それを同じディレクトリに置くことです(別の名前にする必要があります)。また、CSDLToSSDL_TPT.ttと呼ばれるSSDL作成用のT4テンプレートのコピーを作成し、同じ名前の別のディレクトリに配置する必要があります。 .ttファイルのコピーを取得したら、新しい.xamlファイルを開き、SSDLテンプレートのパスを新しいものに変更します(VSまたは任意のテキストエディタのデザイナで)。最後のステップとして、あなたのコピーを開く必要があります。TTファイルとEntitySet要素の作成更新:

foreach (EntityType entityType in edm.GetAllEntityTypes()) { #> 
    <EntitySet Name="<#=WriteEntityTypeName(entityType, edm)#>" EntityType="<#=ssdlModelNamespace#>.<#=WriteEntityTypeName(entityType, edm)#>" Table="prefix_<#=WriteEntityTypeName(entityType, edm)#>" store:Type="Tables" Schema="<#=databaseSchemaName#>" /> 
<# } 

を私は(あなた自身でそれを置き換えることができます)prefix_を指定する名前でTable属性が追加されました。今すぐ新しいワークフローをデータベースから生成するウィザードで選択し、新しいSQLスクリプトを作成する必要があります。 EF6で

+0

あなたが示唆したようにこんにちは、私は正確に行っています。しかし、T-SQL VIA T4(TPT).xamlファイルを編集するときに、生成されたすべてのテーブルの前に "ab_"接頭辞を付けるためには、何を変更する必要がありますか?あなたが推奨する拡張機能を使用しています。多くのありがとう – Houman

+0

私はSSDLから名前を取るべきだと思うが、あなたはまだSQLの作成からテンプレートを更新することはできますが、正しいテーブル名がSSDLで使用されていることを確認してください。 –

+0

あなたはXMLエディタでEDMXファイルを開いてSSDLセクションを自分で修正しなければならないと言っていますか?しかし、私はそれが上書きされるので、私は再マッピングにしたい毎回これをしなければならなかった。これにはより良い方法やチュートリアルはありますか?多くのありがとう – Houman

0

あなたはOnModelCreating(DbModelBuilder ModelBuilderの)をオーバーライドして、このような何かを行うことができます。

modelBuilder.Entity<Contact>().ToTable("ab_Contact"); 
0

あなたはこのように試すことができます。..

あなただけのテーブルの名前を変更する必要がある場合

  1. XMLエディタでEDMXファイルを開くことができます。
  2. そこにSSDLセクションがあります。
  3. エンティティセット要素を特定します(例:<EntitySet Name="Customers" EntityType="ExampleModel.Store.Customers" Schema="dbo" />)。
  4. Table="MyTableName"属性を追加します。 <EntitySet Name="Customers" EntityType="ExampleModel.Store.Customers" Schema="dbo" Table="MyTableName" />

ここでは完全CSDL, SSDL, MSL specificationです。

希望に役立ちます。

は、モデルを使用している場合は最初にあなたがこれを必要はありませんthis link

0

単にエンティティプロパティでのEntitySet名のプロパティを変更

HTH ロレンツォ