私は少し Linq の初心者であり、非常に些細な問題と思われる問題を解決するためのドキュメントを見つけることができませんでした。
同じサーバー上に、データベース内のテーブルへの「疑似」外部キーを持つTable1
データベース内のテーブルがあります。「疑似」。明らかに、2 つのデータベースにまたがる実際のFK を持つことはできないためです。DB1
Table2ID
Table2
DB2
今、私は O/R デザイナで遊んでいます。デザイナにデータベース オブジェクトを持ち込むと、すべてのリレーションシップが生成される方法が気に入っています...とてもクールです! そして、 のすべての「実際の」外部キー関連オブジェクトとの関係があるように、Table1
オブジェクトに との関係を持たせたいと考えています。しかし、間違った DB にあるため、DB ダイアグラムに取り込めません。Table2
DB1
Table2
これを合成するために、でビューTable2
を作成してみました。あはは、オブジェクトをダイアグラムにドロップできるようになりました。と の間に親子関係を作ることもできます。しかし、生成されたコードを見ると、まだ との関係がなく、最も困惑しています。DB1
select * from DB2..Table2
Table2
Table1
Table2
Table1
Table2
私はどこかでステップを逃していますか?これを行うためのより良い/推奨される方法はありますか?
ありがとう!
後で...
ある人が提案したことに沿って、同じ DB 内の関連するオブジェクトのすべての構造をコピーすることにより、 の部分クラスにTable1
にアクセスするために必要なすべてのメソッドを埋めようとしました。Table2
これは実際には読み取りに対して機能しましたが、レコードを更新または挿入しようとするとすぐに例外が発生しました。
An attempt has been made to Attach or Add an entity that is not new, perhaps having been loaded from another DataContext. This is not supported.
したがって、Linq の設計者は実際にこのシナリオについて考え、異なるデータベース内のオブジェクトを接続することは許可されていないと判断したようです。それは本当に残念です... :(
...さらにその後...
@williammandra.com のおかげで、ビューに主キーを手動で作成する必要があることがわかりました。しかし、まだ別の問題があります。何らかの理由で、ビューから値をロードTable2
して新しいレコードに設定し、変更をコミットすると、新しいレコードをTable1
に挿入しようとするため、明らかに PK 違反が発生します。なぜこれが起こるのか、それを回避する方法はありますか?Table2