none
コードファースト RRS feed

  • 質問

  • すでに作られたDBを使用するプログラムを書く場合

    コードファーストは使わないのでしょうか。

    代わりに使うのはデンティティデータモデルでしょうか。

    2011年11月23日 14:38

回答

  • > Model1.Context.ttの下に社員テーブルらしいものがありませんでした。

    えと、これだとちゃんとt4テンプレートが実行されてないですね。
    この下にDbContextを継承したクラスのソースが、そしてModel1.ttの下にPOCOクラスが生成されないといけないです。

    もしかして、「社員」モデルを選択した状態にしないで、単にデータモデルエディタで右クリックしてテンプレートの実行を開始してませんか?
    その場合だとクラスが生成されなかったよーな。

    あと、コントローラーの追加ですが、データコンテキストクラスの指定が間違っていると思います。
    MVCData.edmxのソースを確認して、ObjectContextを継承したクラスがどんな名前になっているか確認してください。
    ウィザードでこのモデルを作るときに指定した名前のはずなんですが。
    それをデータコンテキストクラスとして指定してください。
    これを指定すればソースファーストのコードは必要ないです。
    ObjectContextベースでコントローラー等を生成してくれます。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2011年11月24日 6:00

すべての返信

  • この質問はASP.NETとどのような関係があるのでしょうか?
    2011年11月24日 0:23
  • ASP.NET MVC3とコードファーストを連携させる話じゃないかな。

    データベースファーストでエンティティデータモデルを構築して利用するのが一般的かと。
    で、エンティティデータモデルからコードファースト形式のPOCOのクラスやDbContextを利用したソースコードを生成させることができます。

    http://blogs.msdn.com/b/adonet/archive/2011/11/01/ef-4-2-released.aspx

    この記事の最後のほうに書いてありますが。

    まずエンティティデータモデルを作って、そこでコードを生成したいクラスをすべて選択します。
    で、右クリックして表示されるコンテキストメニューから「コード生成項目の追加」を選択して、表示される新しい項目の追加ウィンドウのなかで「オンラインテンプレート」を選んでADO.NET C# DbContext Generatorを選択するとPOCOのエンティティクラスとDbContextを継承したクラスとかが生成されます。

    あ、これ利用する場合は当然ですがEF4.2も追加しておく必要があります。

    MVC3との連携であれば、こうやって生成したクラスからスキャッフォールディングを利用できます。
    まあ、エンティティデータモデル(ObjectContext)からスキャッフォールディングを利用することもできるんですが。

    http://blogonos.wordpress.com/category/mvcconf-japan/

    このあたりで一度まとめてます。
    EF4.2がでてますが、プロジェクトへの導入の仕方が変わってるぐらいで使い方は変わらないかと。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2011年11月24日 1:02
  • ありがとうございます。

    「ADO.NET C# DbContext Generator」はVBの場合「ADO.NET VB.NET DbContext Generator」でしょうか。

    オンラインテンプレートの実行時に「リモートサーバーがエラーを返しました。(403) 使用不可能」の

    エラーになってしまいます。

     

    また、Controllersの追加で「Entity Framekを使用した・・・」を選んでデータクラス、データコンテキストクラスを

    作りたいテーブルにして実行すると「サポートされていないコンテキスト型です。」とエラーになります。

     

    エラーの原因が分かるようでしたらご教示ください。

    2011年11月24日 2:19
  • 「リモートサーバーがエラーを返しました。(403) 使用不可能」はプロキシのウイルスチェックにひっかかったようでした。

    ダウンロードはできました。

    2011年11月24日 5:08
  • リモートサーバーのエラーは、、、ネットワークの設定が絡むかもしれませんね。
    試してませんが、間に認証を必要とするプロキシがはさまってたりするとうまく動かないなんてこともあるかな、と思います。

    Controllersの追加については手元でNorthWindサンプルDB使って試してみましたけどうまく動きますね。
    データコンテキストクラスの指定がまちがっていたりしませんか?


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2011年11月24日 5:08
  • ありがとうございます。

    ADO.NET VB.NET DbContext Generatorがうまく動かなかったのでしょうか。

    Model1.Context.ttの下に社員テーブルらしいものがありませんでした。

    データコンテキストクラスの指定は下記のようにやりました。

    手でテーブル定義をコンテキスト・クラスにしても「Entity Frameworkを利用した・・・」を使用できるのでしょうか。

    頑張ってEntity Frameworkを使ってみようと思いましたが、

    Entity Frameworkを利用した・・・」は複数のテーブルの値を表示したり

    登録が複数のテーブルにまたがる場合には向いていないから「空の読み取り、書込み・・・」でも良い気がしてきました。

    2011年11月24日 5:52
  • > Model1.Context.ttの下に社員テーブルらしいものがありませんでした。

    えと、これだとちゃんとt4テンプレートが実行されてないですね。
    この下にDbContextを継承したクラスのソースが、そしてModel1.ttの下にPOCOクラスが生成されないといけないです。

    もしかして、「社員」モデルを選択した状態にしないで、単にデータモデルエディタで右クリックしてテンプレートの実行を開始してませんか?
    その場合だとクラスが生成されなかったよーな。

    あと、コントローラーの追加ですが、データコンテキストクラスの指定が間違っていると思います。
    MVCData.edmxのソースを確認して、ObjectContextを継承したクラスがどんな名前になっているか確認してください。
    ウィザードでこのモデルを作るときに指定した名前のはずなんですが。
    それをデータコンテキストクラスとして指定してください。
    これを指定すればソースファーストのコードは必要ないです。
    ObjectContextベースでコントローラー等を生成してくれます。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2011年11月24日 6:00
  • ありがとうございます。

    できました。

    bbbEntities をデータコンテキストに指定しました。

    2011年11月24日 6:13