0

EF プロバイダーを使用する Odata サービスがあります。私は問題なく動作し、簡単に作成できました。しかし今、それを変える必要があります。この質問は、この質問に似ています。しかし、私は答えがはっきりしていません。

一度にすべてのクライアントを更新することは不可能であるため、サービスの 2 つ (またはそれ以上) のバージョンを同時に提供できる必要があります。最初は引き続き EF コードを使用したいと思いますが (今まではとても簡単だったので)、これは必須ではありません。私はいくつかのサービスしか持っていないので、必要な柔軟性が得られるのであれば、書き直してもかまいません。

同じデータベースから同じサービスの複数のバージョンを同時にサポートできる C# を使用して Odata サービスを実装するための最良の (最も簡単で保守可能な) 方法は何ですか?

リフレクション プロバイダーを使用して EF dbcontext を変換してみました。私はこのようなものが欲しかった:

db -> EF db context -> reflection DB context.v1 -> DataService.v1

db -> EF db context -> reflection DB context.v2 -> DataService.v2

そして、EFの選択のみが許可される場合、私はほとんどそれを機能させました(少なくとも読み取りの場合)ToList()

write as wel をサポートする必要があります (一部のサービスでは)

同じデータベースをターゲットとする 2 つの EF db コンテキストを持つことは許容できる解決策ですが、これを達成できるかどうか、またどのように達成できるかはわかりません。

前もって感謝します

4

1 に答える 1

0

問題の解決策を見つけたので、共有したいと思います。私のソリューションの詳細な説明については、このブログ投稿をご覧ください。

私のソリューションは、次の 3 つのプロジェクトに基づいています。

  • 私のデータベースにマップし、私のサイトにデータを提供し、データベースの移行を支援する「the」ef dbcontextsを含むWebサイトプロジェクト。このプロジェクトでは、サービスの各バージョンに dataservice.svc クラスがあります。
  • 現在のデータベースとこのサービス バージョンの dto の間でマップされる別の EF dbcontext を含む serviceV1 クラス ライブラリ プロジェクト。マッピング (調整) は、データコンテキストで流暢な API を直接使用して行われます。
  • 現在のデータベースとこのサービス バージョンの dto の間でマップされる別の EF dbcontext を含む serviceV2 クラス ライブラリ プロジェクト。

サービス プロジェクトのデータ コンテキストは、次のステートメントを使用して、データベースを移行せず、スキーマの違いを無視するように設定されています。

Database.SetInitializer<ServiceV1.MyDbContext>(null);

これが誰にも役立つことを願っています!

于 2012-10-04T18:32:15.450 に答える