MVC3プロジェクトAとB内に2つのエンティティデータモデルがあります。
最近、いくつかの新しい機能を処理するために新しいエンティティデータモデルBを追加しました。問題は、既存のコードが機能しなくなり、エンティティモデルA内のコードにアクセスしようとすると次のエラーが発生することです。
エラーメッセージは次のとおりです。
概念モデルタイプ 'project.models.Bclass'が見つかりませんでした
エンティティモデルAはまったく変更されていないため、この新しい機能が現在のコードに影響を与えた理由がわかりません。また、機能Bは別のクラスにあり、モデルAに干渉しません。
新しいコードがプロジェクトから削除され、エンティティモデルBが除外されると、コードは正常に機能します。
エラーからのスタックトレースの一部を次に示します。
Exception : Could not find the conceptual model type for 'Project1.Models.CrossSession'.
Application Class - method : System.Data.Metadata.Edm.MetadataWorkspace -- GetEdmSpaceType
User : temp.user
Url : http://localhost/project1/auth/message
Stacktrace : at System.Data.Metadata.Edm.MetadataWorkspace.GetEdmSpaceType(StructuralType objectSpaceType)
at System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappings()
at System.Data.Entity.Internal.InternalContext.TryUpdateEntitySetMappingsForType(Type entityType)
at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
解決策が見つかりました。場合によっては(ランダムに)entity framework
によって生成されたコードに取り違えがあるように見えます。これは明らかに既知のバグであり、将来のリリースで修正される予定です。それまでの間、これを回避する方法は、efm
をソリューション内の別のクラスに移動することです。
EntityFrameworkを最新バージョン(6.0)に更新することでこれを解決しました http://nuget.org/packages/EntityFramework/ 。
インストール後、モデルを再生成すると機能します;)
同じプロジェクト内の2つの異なる.edmx
ファイルで同じ問題が発生しました。最初の.edmx model
には"Add Code Generation Item"
を使用し、2番目のモデルには使用しませんでした。プロジェクトは正しくビルドされていましたが、実行時にその例外がスローされました。
2番目の.tt
の.edmx model
クラスの生成も解決しました。
考えられる理由の1つは、データベースファーストのアプローチを使用し、エンティティクラスの追加を忘れると、このエラーが発生することです。
つまり(以下にリンクされているガイドから)
私は通常、ジュリーラーマンのガイドを使用します。 https://msdn.Microsoft.com/en-us/library/jj206878(v = vs.113).aspx
EF 4.1をインストールし、DbContextをEMDXと組み合わせようとしました-ビューを返そうとすると同じエラーが発生しました-それが私がここにたどり着いた理由です...これを回避する方法は機能を分離することだと思いますソリューション内の別々のアセンブリに...
これは、Visual Studio 2010で新しいedmxを生成して、古いedmxと一致させることでも解決できます...(そして、生成されたファイルをコピーします)
Edmxモデルを削除し、エンティティパッケージを削除し、エンティティ5.0を再インストールして動作します。
Visual Studio 12を使用しても、問題はまだ解決されていません。別の回避策として、エンティティモデルよりも前の「昔ながらの」データクラスを使用して2番目のSQLデータモデルを設定しました。これらはまだ存在し、引き続き機能します。 [追加]-[新しいアイテム]-(データカテゴリ)-[LINQ To SQLクラス]を使用して、ServerExplorerを開き、サーバーとデータベースを見つけて、データクラスペインにドラッグアンドドロップします。古い学校ですが、エンティティモデルの全機能が必要ない場合は、この非常に不便な問題を簡単に克服できます。