2

現在、マルチ DB SQL Server 環境で実行しており、linq to sql を使用してクエリを実行しています。

ここに記載されているアプローチを使用してクロス DB 結合を実現しています: http://www.enderminh.com/blog/archive/2009/04/25/2654.aspx

だから基本的に:

2 つのデータ コンテキスト - ユーザーと支払い

Users.dbo.UserDetails {PK: UserId }
Payments.dbo.CurrentPaymentMethod { PK: UserId }

テーブルを DBML にドラッグし、プロパティ ウィンドウで、ソースを dbo.UserDetails から Users.dbo.UserDetails に変更して、DB 名を完全修飾します。

次に、次のようにして、単一のデータ コンテキスト クロス DB 結合を発行できます。

var results = (from user in datacontext.Table<UserDetail>()
        join paymentmethod in dataContext.Table<CurrentPaymentMethod>() on user.UserId equals paymentmethod.UserId
    ... rest of query here ...);

今、これはチケットのようなブーイングであり、私が望むように機能します. 私が現在抱えている唯一の問題は、スキーマの更新などが発生するときです (重要な開発段階にあるため、比較的頻繁に発生します)。

(そして最後に、質問です!)私が達成したいこと(そして、DBMLファイルがT4ガイド付きであることを知っているので、推測として質問をT4としてマークしました)は、任意のテーブルをソースが自動的に DB 名を取得するデータ コンテキスト (つまり、dbo.UserDetails だけでなく、Users.dbo.UserDetails を持つことになります)?

ポインタをありがとう:)

テリー

4

1 に答える 1

1

T4 Toolboxと、それが提供する LinqToSql コード ジェネレーターを見てください( Oleg Sychの厚意による) - テンプレートをカスタマイズして、好きなように参照を生成できますが、遭遇する問題は、データベース名は dbml ファイルに保存されません。

おそらく、ディクショナリなどを使用してジェネレータにフィルタを追加し、.tt ファイルでテーブルとそれらが属するデータベースのリストを維持することができます。そうすれば、メンテナンス タスクがデザイナからクラスを削除して再度ドロップすることである場合、正しいデータベース名が取得されます。

于 2011-05-09T19:55:02.453 に答える