2012-01-19 13 views
0

MVC3をEFで使用しています(バージョン4、ただし4.0,4.1などが不明)。私は昨日からこれと戦ってきました。私はどこでも答えを見つけられません。私は "Pro Entity Framework 4.0"という本を使用しています。エンティティFw 4、MVC3、派生クラスがObjectContextに表示されない

私はモデルの最初のアプローチを行なったし、私は、継承を使用したいので、私は最初testingsを行うための基本モデル(申し訳ありませんが、リンクをクリックして、私は絵を置くのに十分な担当者を持っていない)を作成しました:

EF Model

このモデルではデータベースを作成しました。エンティティ名を複数形にしているにもかかわらず、派生したクラステーブルのために、プレフィックス付きの単一テーブル名を作成したので、命名規則にはあまり納得していません。私はSSMSがインストールされているが、サーバーエクスプローラから見て、絵が表示されていないごめんなさい:

DB created from EF Model

その後、私は、読み取りとテンプレート「コントローラとBaseClassのためのコントローラを作成/アクションを書いて、ビュー、Entity Frameworkを使用して "。それは素晴らしい作品です!それはすべてのビュー、CRUDを作成しました。詳細で例えば

は、私はこのコードを持って表示:

// 
    // GET: /BaseClass/Details/5 

    public ViewResult Details(int id) 
    { 
     BaseClass baseclass = db.BaseClasses.Single(b => b.Id == id); 
     return View(baseclass); 
    } 

それは正常に動作します。

私はDerivedClassのために同じことをしました、そして、私はすべてのCRUDアクションとビューでコントローラを手に入れました。そして、今問題。あなたはそれがコンパイルエラーを与えると、db.BaseClasses代わりのdb.DerivedClassesを取得しようとしますが、DBはへのアクセスを提供していない見ることができるように

// 
    // GET: /DerivedClass/Details/5 

    public ViewResult Details(int id) 
    { 
     DerivedClass derivedclass = db.BaseClasses.Single(d => d.Id == id); 
     return View(derivedclass); 
    } 

:たとえばDerivedClassの詳細コントローラは、このようなものです私はそれが可能である、コード内で手動DerivedClassのインスタンスを作成する場合DerivedClassエンティティは、DerivedClass.Butに関連するすべてのDBには何もありません:

MyNamespace.Blablabla.Site.Models.DerivedClass dev = new Models.DerivedClass(); 

私は何も足りませんか?前もって感謝します。

答えて

1

継承階層は1つのDbSetにマッピングされます。あなたが継承されたエンティティでフィルタしたい場合は、使用することができます。

DerivedClass derivedclass = db.BaseClasses.OfType<DerivedClass>().Single(d => d.Id == id); 

OfType<>()は、指定した型のインスタンスに設定されたオブジェクトをフィルタリングします。

派生したエンティティを追加して更新する場合は、親のDbSetとEFによって正しい表にもマップできます。

+0

ありがとうWouter、これは私が必要なものです! –

関連する問題