none
MetaModel.RegisterContext でのエラーについて RRS feed

  • 質問

  •  こんにちは。
    解決につながる情報をお持ちでしたらお願いします。
    開発環境:
    ・Visual Studio Express 2012 for Web
    ・SQL Server 2012 Express

    動的データエンティティ採用の目的、方針
    ・データメンテナンスにかかるコーディング量を
     自動生成コードを極力利用することによって削減したい。

    VS2012で新規プロジェクトの作成

    [テンプレート選択:.NET Framework4.5]ASP.NET 動的データエンティティ Webアプリケーション

    作成されたプロジェクトルートにて新規項目追加:ADO.NET Entity Data Model

    データベースから作成(仮にDB1)

    作成されたedmxの内容を確認後、保存。

    Global.asaxを開き、テンプレートで作成されたRegisterRoutes内のコードを修正
    //DefaultModel.RegisterContext(typeof(YourDataContextType), new ContextConfiguration() { ScaffoldAllTables = false });
     →DefaultModel.RegisterContext(typeof(DB1ModelEntities), new ContextConfiguration() { ScaffoldAllTables = false });

    実行結果:
    System.ArgumentException はユーザー コードによってハンドルされませんでした。
      HResult=-2147024809
      Message=コンテキスト型 'CustomerWeb.C_R_DBEntities' はサポートされません。
      Source=System.Web.DynamicData
      StackTrace:
           場所 System.Web.DynamicData.MetaModel.RegisterContext(Func`1 contextFactory, ContextConfiguration configuration)
           場所 System.Web.DynamicData.MetaModel.RegisterContext(Type contextType, ContextConfiguration configuration)
           場所 CustomerWeb.Global.RegisterRoutes(RouteCollection routes) 場所 c:\ndd-net\CustomerWeb\CustomerWeb\Global.asax.cs:行 33
           場所 CustomerWeb.Global.Application_Start(Object sender, EventArgs e) 場所 c:\Dir1\Dir2\Dir3\Global.asax.cs:行 75
      InnerException:

    MetaModel.RegisterContextのパラメータは自動生成されたDB1のコントテキストクラスの型を渡しています。

    原因切り分け作業1
    ・DB1ModelEntitiesの定義を確認:
        public partial class DB1ModelEntities : DbContext
        {
            public C_R_DBEntities()
                : base("name=DB1ModelEntities")
            {
            }
     ・・・
    ・プロジェクトの参照設定
     EntityFramework(バージョン5.0.0.0)
     System.Data.Entity(バージョン4.0.0.0)
     System.Web.DynamicData(バージョン4.0.0.0)
     
    原因切り分け作業2
    同じ作業を
    ・Visual Studio 2008 Standard SP1
    ・SQL Server 2008 R2 Express(仮にDB2)

    で実行したところ上記エラーは発生しませんでした。
    (コントテキストクラスがDbContextのサブクラスでないためでしょうか。。。)

    この結果をうけて
    ・Visual Studio Express 2012 for Web
    ・SQL Server 2008 R2 Express(仮にDB2)

    で実行したところやはり上記エラーが発生。
    現在、検証段階ということもあり、まずは
    「動的データエンティティ Webアプリケーション」
    テンプレートを使用して、ノーマルな形で
    動作させてみたいと思っております。
    アドバイスよろしくお願い致します。

    2013年3月14日 5:03

回答

  • 自己レスです。
    System.Data.Entity.DbContext って
    コンテキスト型では無かったってことですね。。。

    Entity Framework のバージョンアップに伴い
    ObjectContext → DbContext
    となったように思い込んでいましたが、
    public class DbContext : IDisposable, IObjectContextAdapter
    なので、DbContextってコンテキストに対するアダプタだったみたい。

    クラス名にAdapterとかつけてくれれば、良いのに、イジワルですね。

    • 回答としてマーク あすねこ 2013年3月15日 2:50
    2013年3月15日 2:50

すべての返信

  • 自己レスです。

    以下が参考になりました。

    blogs.msdn.com/b/webdev/archive/2012/08/15/using-dynamic-data-with-entity-framework-dbcontext.aspx


    エラーは回避できましたが、

    まだ原因や詳細が掴めていません。

    投稿を見てくださっている方に

    まずはご報告と思いまして。。。

    さらにわかったらご報告致します。

    • 回答としてマーク あすねこ 2013年3月15日 2:50
    • 回答としてマークされていない あすねこ 2013年3月15日 2:50
    2013年3月15日 2:34
  • 自己レスです。
    System.Data.Entity.DbContext って
    コンテキスト型では無かったってことですね。。。

    Entity Framework のバージョンアップに伴い
    ObjectContext → DbContext
    となったように思い込んでいましたが、
    public class DbContext : IDisposable, IObjectContextAdapter
    なので、DbContextってコンテキストに対するアダプタだったみたい。

    クラス名にAdapterとかつけてくれれば、良いのに、イジワルですね。

    • 回答としてマーク あすねこ 2013年3月15日 2:50
    2013年3月15日 2:50