2

Entity Framework 5 デザイナーの [プロパティ] ダイアログにカスタム プロパティを追加しました。

http://msdn.microsoft.com/en-us/library/microsoft.data.entity.design.extensibility.ientitydesignerextendedproperty(v=vs.103).aspx

これはうまく機能し、プロパティが [プロパティ] ダイアログに表示され、EDMX ファイルに保存されます。

ここで、DDL 生成プロセスでそのプロパティを使用したいと思います。T4 テンプレート ファイルSSDLToSQL10.tt(にありますC:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen) を編集しました。

ただし、カスタム プロパティはメタデータ ツリーのどこにも表示されないようです。ウェブサイト(ドイツ語)

http://www.databinding.net/en/blog/post/2010/12/13/entity-framework-4-erweiterte-eigenschaften-in-einer-t4-vorlage-verwenden.html

拡張プロパティがEntityType.MetadataPropertiesコレクションに表示されるはずですが、このコレクションには次のメンバーしか含まれていません:

KeyMembers Members Name NamespaceName Abstract BaseType DataSpace MetadataProperties

それらのどれも私のカスタム プロパティではありません。

何か不足していますか?IEntityDesignerExtendedPropertyT4 コード生成テンプレートで の値にアクセスするにはどうすればよいですか?

編集:カスタム プロパティを持つ EDMX パーツは次のとおりです。

<edmx:ConceptualModels>
  <Schema ...>
    ....
    <EntityType Name="Entity1">
      <Key>
        <PropertyRef Name="Id" />
      </Key>
      <Property Type="Guid" Name="Id" Nullable="false" annotation:StoreGeneratedPattern="None" />
      <Property Type="String" Name="Name" Nullable="false" />
      <a:MyNewProperty xmlns:a="http://schemas.tempuri.com/MyNewProperty">True</a:MyNewProperty>
    </EntityType>

どうにかしてそのカスタム プロパティを CSDL から SSDL にマップする必要がある思います

4

2 に答える 2

3

SSDL (ストア層) を使用して DDL を作成しているときに、プロパティを CSDL (概念層) に追加しました。SSDLToSQL10.tt で概念モデルにアクセスできるはずですが、それが本当に求めているものではないと思います。一般に、あなたのプロパティは EF ランタイムが実際に使用できるものではありません。拡張機能として扱われ、無視されると思います。EF ランタイムで使用されることになっているプロパティを追加する場合は、プロパティを CSDL (概念レイヤー) と SSDL (ストア レイヤー) で宣言し、MSL (マッピング レイヤー) で正しくマップする必要があります。おそらく最も難しい。あなたが達成しようとしていることを見逃していない限り、おそらく間違った拡張ポイントを使用しています。のIEntityDesignerExtendedPropertyデザイナーのプロパティ ウィンドウとモデル ブラウザー ウィンドウに表示されるカスタム プロパティを定義できますが、実行時には無視されます。私にとっては、モデルにプロパティを自動的に追加したいようです。そのために、IModelTransformationExtensionを使用してみます。ここでは、自由に変更できる edmx 全体を指定する必要があります (つまり、CSDL、SSDL、MSL および正しい EF xml 名前空間に要素 (プロパティ) を追加します)。データベースを生成しようとする前にモデルが自動的に保存されると思うので、OnBeforeModelSavedを使用してみます。

于 2013-08-19T17:05:32.537 に答える