トップ回答者
MetaModel.RegisterContext でのエラーについて

質問
-
こんにちは。
解決につながる情報をお持ちでしたらお願いします。
開発環境:
・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アプリケーション」
テンプレートを使用して、ノーマルな形で
動作させてみたいと思っております。
アドバイスよろしくお願い致します。
回答
-
自己レスです。
System.Data.Entity.DbContext って
コンテキスト型では無かったってことですね。。。Entity Framework のバージョンアップに伴い
ObjectContext → DbContext
となったように思い込んでいましたが、
public class DbContext : IDisposable, IObjectContextAdapter
なので、DbContextってコンテキストに対するアダプタだったみたい。クラス名にAdapterとかつけてくれれば、良いのに、イジワルですね。
- 回答としてマーク あすねこ 2013年3月15日 2:50
すべての返信
-
-
自己レスです。
System.Data.Entity.DbContext って
コンテキスト型では無かったってことですね。。。Entity Framework のバージョンアップに伴い
ObjectContext → DbContext
となったように思い込んでいましたが、
public class DbContext : IDisposable, IObjectContextAdapter
なので、DbContextってコンテキストに対するアダプタだったみたい。クラス名にAdapterとかつけてくれれば、良いのに、イジワルですね。
- 回答としてマーク あすねこ 2013年3月15日 2:50