3

アプリケーションの永続ストレージ メカニズムを SQL Compact から Oracle に移植しています。

現在の実装

アプリケーションは Entity Framework 5 (EF) を実装していますが、非常に緊密に結合されています。(a) EF とコントローラーの間にサービス レイヤーがなく、 (b)IRepository EF と SQL Compact の間にスタイルの抽象化がありません。

C# モデルは単純な POCO ですが、データ注釈が豊富で、DB スキーマを生成するために「コード ファースト」スタイルが使用されます。

問題 (オラクル)

Oracle の標準 ODP.Net プロバイダを使用する必要があります。プロバイダーは EF をサポートしますが、「コード ファースト」の方法論はサポートせず、「モデル ファースト」のみをサポートします。

意図したソリューション

オラクルが飲み込むことができる「モデルファースト」スタイルのEDMXファイルを構築するためにそれらを使用しながら、コントローラーに緊密に結合されたEF実装とモデルクラス注釈の豊富さを維持する方法を見つけようとしています。基本的に、「コードファースト」を模倣する方法を探しています。

C# オブジェクトを EDMX ファイルにドラッグするのと同じくらい簡単だと思っていましたが、さらに多くのことが行われているようです。

質問

既存の C# モデルを使用して .EDMX ファイルを作成するにはどうすればよいですか? それが不可能な場合、この目標を達成するための次善の策は何ですか?

注: 有料のサード パーティ製品はお勧めしません。ソリューションは、Visual Studio、C#オープン ソース ライブラリ、またはそれらの組み合わせで実行できる必要があります。

4

3 に答える 3

1

DbContextがある場合は、「EdmxWriter.WriteEdmx()」を使用して、デザイナーで開くことができるはずのedmxファイルとしてモデルを書き込むことができます。

于 2012-11-20T21:54:00.030 に答える
0

編集: 記事が投稿された場​​所は、URL を再編成しました。参照を修正しました。リンク切れですみません。

これは、MetaDataTypeAttribute を使用して、新しく生成されたデータベース ファースト/モデル ファーストのedmxを利用するときにすべてのコード ファースト アノテーション作業の利点を得る方法を説明する、私が書いたブログ投稿です。

モデルから .edmx を構築することはできませんが、少なくともデータベースから生成し、現在のコード ファースト クラスをメタデータとして使用することはできます。

于 2012-11-20T18:52:00.107 に答える
0

@Pawelは、根本的な答えを提供しましたEdmxWriter。彼の答えはマークされており、彼に感謝します。私の答えは、詳細、Oracle ドキュメントへの参照、および簡単なコード例を提供することです。


C# から EDMX

名前空間は、この目的のためSystem.Data.Entity.Infrastructureに static を提供します。EdmxWriter

// 1. Instantiate your DbContext derived type
var db = new AppContext();

// 2. Instantiate an XmlWriter
var xw = XmlWriter.Create("models.edmx");

// 3. Write to file.
EdmxWriter.WriteEdmx(db, xw);

結果の EDMX ファイルをプロジェクト/ソリューションに追加し、デザイナーで開くことができます。

EDMX から Oracle スキーマへ

EDMX ファイルのプロパティにいくつかの変更を加えると ( 「Model First」のステップ 2を参照)、Generate Database from Modeldb スキーマの構築に使用される Oracle 構文の SQL スクリプトを使用できます。

注: Pawel がコメントで指摘したように、EDMX ライターはデータ注釈属性 (例: [MaxLength]) と流暢な API 構成の両方を認識して尊重し.HasMaxLength(50)ますが、C#/EntityFramework と Oracle の db 型の間の特定のデータ型マッピングの問題を処理しません。

于 2012-11-21T01:17:30.630 に答える