none
エンティティデザイナーのカスタマイズか新規作成 RRS feed

  • 質問

  • Entity Data Modelデザイナーは概念モデルを作り、データベースの論理モデルとマッピングさせます。
    エンティティの属性を選択すると型を表示編集できます。
    やりたいことは
    1,プロパティ項目のカスタマイズ。型のプルダウンを指定したものだけにしたい。例えばStringとInt32だけ。Null許容の項目を表示させたくない。等。
    2,マッピングの詳細を表示させない。または設定しなくてもエラーを出さない。
    それの実現方法
    1,既存のEntity Data Modelデザイナーをカスタマイズしたい。そもそもカスタマイズする方法があるかどうかも不明。
    2,独自のEntity Data Modelデザイナーを作る。日本語の説明はなく困難だと思いますが。
    実現方法1は存在するでしょうか?なければ頑張って2をやるしかないと思いますが。
    2017年3月31日 4:05

すべての返信

  • 表からカスタマイズする方法が見つからなかったので裏口からカスタマイズしてみる。

    • プロパティウィンドウの中身はSystem.Windows.Forms.PropertyGridなので、ウィンドウから探し出す
    • PropertyGridに表示される対象が変わるとSelectedObjectsChangedイベントが発生する。
      Microsoft.Data.Entity.Design.UI.ViewModels.PropertyWindow.Descriptors.EFPropertyDescriptorという型がEntityのプロパティを選択すると設定されるので、その型を検出するようにする。
      検出したEFPropertyDescriptorがPropertyGridに公開しているプロパティをTypeDescriptor.GetProperties()で取り出して、Null許容は除外し、型は候補にフィルタをして公開されるように差し替える。
      そのほかに頑張ってPropertyDescriptorを操作してやればいろいろできるでしょう。
    • モデルブラウザでコンテキストメニューで複合型にスカラーとして追加できる箇所は、コンテキストメニューはWPFで作られているので、WPFのイベントを検出して一覧の非表示を制御する。
    • マッピングの詳細は表示するためのコマンドが発生するので、そのコマンドをEnvDTE.CommandEvents.BeforeExecuteイベントでキャンセルすることで表示させないようにする。

    プルダウン項目の制限、Null許容の非表示、マッピングの詳細の非表示を試しにVSIXで実装してみました

    独自のデザイナはVSIXでウィンドウを作っていけば何とかできるんじゃないでしょうか

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2017年4月10日 14:11
  • 和和和 さん、こんにちは
    フォーラム オペレーターの立花楓です。
     
    本件についてしばらくお時間が経ちましたが、その後いかがでしょうか。
    gekka さんから情報をお寄せいただいておりますので、ご確認いただきご返信をいただけましたら幸いです。
     
    また、参考になる情報がありましたら、投稿者からの [回答としてマーク] をお願いします。
     
    宜しくお願いします。

    MSDN/TechNet Community Support 立花楓

    2017年4月24日 7:59
    モデレータ
  • 遅れました。VSIXについて

    VS2017のインストールで拡張機能の開発というのがありました。

    もしかしてそれでできるようになるのかなと予感を感じました。

    今日でVS2017 Enterpriseが切れるので後はCommunityでやってみます。

    ウィンドウから探し出すってのはリンクから見るとフレームワークの仕様として理解するためにはかなり難易度高いものと感じました。

    いったんできたものがどういう成果物になるのかわからないのが今の悩みですがとりあえずプロパティウィンドウ情報をデバッグしながら取得できるところまでやってみます。

    まずは作っていただいたVSIXを使ってみて感触を確かめてみます。ありがとうございました。

    2017年6月6日 13:56
  • リンク先のソースでとにかくVSIXの開発のデバッグができるか確認したくてソースをVSIXプロジェクトに配置し実行すると別のVSが立ち上がります。これで動作を確認しようというのだと思いますが各コードに置いたブレークポイントで停止しません。

    そもそもどんなプロジェクト、ソリューションが正しいのかわかりませんのでできればソリューション全てまたは、最小限のプロジェクト作成の仕方を教えていただけないでしょうか?

    私がやったのは

    1. 新しいプロジェクト
    2. VisualC#
    3. Extensibility
    4. VSIXProject

    ここでindex.html,source.extension.vsixmanifest,stylesheet.cssができます。

    このプロジェクトにリンク先のソースを入れてみました。ビルドエラーは起きませんが動作に何の影響も与えていないようです。

    2017年6月10日 7:04