2012-04-05 7 views
0

SQL Server 2008 R2のテーブルでいくつかの変更を行うASP.NET Webアプリケーションがあります。 この表には、同じデータベース・サーバー上の別のデータベースの別の表で更新を行うトリガーがあります。エンティティフレームワークが他のデータベースへのトリガーをアクティブにします。エラー

変更を保存すると、次のエラーが発生します。 - エラーメッセージ:基になるプロバイダがコミットに失敗しました。 - InnerException:このSqlTransactionが完了しました。もはや使用できなくなります。

また、データベースユーザーが他のデータベースに接続することはできません。

誰かがこの仕事をどのようにすることができるかを知っていますか?

+3

ステップ1 - このトリガーを実装して傷つける者を見つけます。トリガーは外部リソースにアクセスするべきではありません(この場合、別のデータベースは同じインスタンス上にあっても外部リソースです)。 –

+0

ステップ1が完了しました。どのデータベースを同期させておくのが最良の方法ですか? MS Syncフレームワークまたはレプリケーションサービス? – JurgenStillaert

+0

データベースを同期している場合は、ある種のレプリケーションが示される可能性があります。関連するデータを更新/監査する場合は、サービスブローカーのようなものを検討することができます。 –

答えて

0

トリガーは、Entity Frameworkとは関係ありません。

トリガは、その変更がどこから生じたかにかかわらずテーブルに変更が加えられたときに発生します。

これはおそらく権利の問題です。システムは、最初のデータベースへの接続に使用されたセキュリティコンテキストを使用して2番目のデータベースに変更しようとしています。トリガーによって引き起こされた変更が失敗すると、同じトランザクション内のすべてが失敗します。

トランザクションで2つのデータベースにアクセスしているので、MSDTCを使用していて、トランザクションが開始されていることと、その権利があることを確認してください。

関連する問題