タイトルがすべてを物語っています。さまざまな方法でいくつかのブログを見つけました (EF モデルを XML にシリアル化し、IEdmModel に再度逆シリアル化する方法が 1 つでした) が、それらはすべて古いバージョンの OData パッケージに基づいています。
2 に答える
DbContext がデータベース ファーストのアプローチから構築されている場合、指定された回答は失敗し、次のエラーが発生します。
DbModelBuilder の作成、または Database First または Model First を使用して作成された DbContext からの EDMX の書き込みはサポートされていません。EDMX は、既存の DbCompiledModel を使用せずに作成された Code First DbContext からのみ取得できます。
これをしばらくいじった後、適切な解決策を見つけました。基本的に、問題の DbContext を含むアセンブリから CSDL リソースを取得し、Microsoft.Data.Edm.Csdl.CsdlReader.TryParseメソッドを使用して解析します。結果の IEdmModel は有効で、モデルの構築時に EntityFramework によって提供された正確な情報が含まれています。
使用例はこちら
シリアル化が唯一の方法です。
私は数ヶ月前にこれについて怒鳴りました。私の知る限り、それ以来何も変わっていません。個人的には、あまり変わるとは思っていません。簡単に言うと、2012 年 9 月の時点で、EF で EdmLib を使用する計画はなく、EF のコードを他のプロジェクトで使用する予定もありません。
OData の EdmLib にどの程度合わせる必要がありますか?
Not worth adopting code Cost of implementing SSDL & MSL Freedom to evolve our API independently Look at aligning names of types and properties where appropriate