3

最近、.NetページでEFを使用することを検討していますが、設定されている公開データベースにアクセスしようとすると少し苦労します。

たとえば、Oracle SQL開発者では、次のようなパブリックデータベースにアクセスします。

SELECT name FROM users@publicserver

私はこれを次のように使おうとしています

Using myEntities As New TestEntities()
    Dim allNames = From name In myEntities.users@publicserver
                     Select name
    GridView1.DataSource = allNames
    GridView1.DataBind()
End Using

明らかに、これはEFにパブリックサーバーテーブルが含まれていないため機能しません。これをEFに追加する方法がわからないためです(それが理にかなっている場合)。

これを達成することが可能かどうか知りたいのですが、そうでない場合は、これにアクセスするための最良の方法について誰かがアイデアを持っていますか?

編集

理想的には、可能であれば、パブリックデータベースリンクでLINQを使用できるようにしたいと思いますか?

4

2 に答える 2

2

シノニムを使用してみましたか?

CREATE SYNONYM [dbo].[MyTable] FOR [AnotherDatabase].dbo.[MyTable]

そして、次のように書くことができます:

SELECT name FROM MyTable

シノニムは機能しますが、リバース エンジニアリングでは自動的に検出されないため、.edmx ファイルを手動で編集して機能させる必要があります。方法は次のとおりです

もう 1 つのオプションは、Code First アプローチを採用し、[Table] 注釈を使用して、テーブルの名前の代わりにシノニムの名前を単純に記述することです。

于 2012-07-23T18:13:15.903 に答える
2

別のデータベースからデータを選択するだけの場合は、ビューを作成し、それをテーブルとビューのリストに含めます。データベースを更新、挿入、または削除する場合は、いくつかの問題について考える必要があります。

  • 2 つのデータベースは高速で信頼性の高いリンクで接続されていますか? リンクが遅いと、アプリケーションの応答時間が遅くなります。せっかちなユーザーは、何かが起こるまでクリックし続けることが知られています...
  • リンクされたデータベースでトランザクションが失敗した場合の結果は? トランザクション全体が失敗する必要がありますか、それとも失敗をログに記録するだけで十分ですか?
  • 別のデータベースに書き込むときは、最初のデータベースでのトランザクションが完了し、リンクされたデータベースでのトランザクションが処理され、個別にログに記録されるように、Oracle アドバンスト キューを使用することを好みます。これは即時同期の要件を満たしていませんが、多くの場合、要件はすぐに整合性を保つことではなく、すぐに整合性を保つことです。
  • どちらにしても、データベース リンクの更新、挿入、および削除アクションは、リンクをカプセル化して Entity Framework から非表示にするパッケージで処理する方が適切です。

編集: 接続が思ったほど安定していない場合は、高度なキューを使用する方が理にかなっています。基本については、このやや古い記事を参照してください。キューを使用すると、次の機能が得られます。

  • 挿入/削除/更新をキューに入れることで、アプリケーションのアクションは、リンクされたデータベースでのセカンダリ トランザクションが成功したという確認を待たずに完了することができます。
  • キューは、データベース間のトランザクションが試行された回数を追跡するように設定されています
  • 操作の潜在的な複雑さは、アプリケーション コードで処理する必要はありません。EF が最も得意とすることを行うことができます。データベースへのインターフェイスを提供し、他の要件 (別のデータベースへのリンク) はデータベースによって処理されます。

すべての CRUD 操作は、EF が使用できるデータベース パッケージにカプセル化できます。

11g データベースで最新リリースを使用する場合、エンティティ フレームワークなしで LINQ と Oracle を使用できます。このリリースは、この時点ではまだきしむように新しいため、実稼働プラットフォームでこれを採用する前に、他のユーザーの意見を探すことをお勧めします。

于 2012-07-16T16:30:04.667 に答える