問題タブ [or-designer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Linq を使用して、異なるデータベース内のテーブルを接続するにはどうすればよいですか?
私は少し 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
c# - LinqToSQLと変更されたフィールドの監査
これらのLinqToSQLの質問のもう1つは、O / R Designerの動作が非常に不可解であるため、どこかでボートに乗り遅れたに違いないと確信しています...
LinqToSQLテーブルの基本クラスがあります。これをと呼びLinqedTable
ました。私はリフレクションを使用して、子孫クラスのすべてのプロパティを取得し、他の標準的な処理を実行することに成功しました。
ここで、テーブルの自動監査を行いたいので、LinqedTable
レコードが挿入または削除されたとき、またはフィールド値が変更されたときはいつでも、変更タイプ、フィールド名、およびその値の詳細を示すレコードを監査テーブルに挿入します。保存前と保存後。
PropertyChanging
イベントを使用して、保存する前にすべての変更されたプロパティを追跡し、各SubmitChanges()
呼び出しの後に変更のコレクションをクリアすることで、それを実行できると思いました。しかし、O / Rデザイナーから生成されたコードは、奇妙な理由で、イベントのプロパティ名を提供しませんPropertyChanging
。空の文字列を送信します。(なぜ?!)イベントでプロパティ名を送信しますがPropertyChanged
、元の値を取得するにはもう遅すぎます。
部分メソッドを使用してすべてのプロパティの元の値をすべて取得しようと考えましたOnLoaded()
が、これは定義上プライベートであり、基本クラスのそのメソッドにアクセスする必要があります。リフレクションを使用してそのメソッドを取得したとしても、それは、テーブルごとに部分メソッドの残りの半分を実装する必要があることを意味します。これは、継承の目的をやや損なうことになります。
また、DataContextで、使用またはオーバーライドするのに適したメソッドが見つかりません。
では、この監査機能を機能させるために何をお勧めしますか?
c# - 私の O/R デザイナーは、designer.cs ファイルを削除し続けます!
O/R デザイナーを使用して Linq オブジェクトに変更を加えると (通常は DB に追加したフィールドを追加することによって)、プロジェクトを保存すると、designer.cs ファイルが取得されるという奇妙な問題があります。削除しました!
幸いなことに、頼りになるソース管理があります。ファイルの削除を取り消し、csproj ファイルへの変更を取り消します。しかし、これは本当に厄介で、正当な理由があるようには見えません (私のプロジェクトに約 100 個のオブジェクトが含まれているという事実は言い訳にはなりません)。
他の誰かがこの問題を抱えていますか?これが起こる原因は何ですか?
編集- 追加情報 - 私の DataContext クラスはカスタム基本クラスで設定されています。これは何か関係があると思いますか...?
c# - LinqToSql を使用して文字列値を列挙型に暗黙的に変換するにはどうすればよいですか?
LinqToSql を使用してテーブルに列挙値をマッピングする方法について以前質問したところ、O/R デザイナーを使用して型を global::MyNamespace.TMyEnum に設定するという回答がありました。
列挙が整数に基づいている場合、それは問題なく機能します。しかし、列挙型が文字列値に基づいている場合はどうでしょうか? これの最も明白なアプリケーションは次のとおりです。
ここで、データベース上の同等の値はM
、F
およびU
です。列挙型を文字列として入力することはできません。ではGender
、LinqToSql オブジェクトのプロパティがTGender
値を返すようにするにはどうすればよいでしょうか?
c# - 異なるdbmlダイアグラム上にあるLinq-To-Sqlオブジェクトを関連付ける方法は?
Linq-To-SQLクラスを反映した2つの異なるdbml図があります。(これらは異なるプロジェクトに表示されるため、これが必要です。)一方の図のオブジェクトの1つには、もう一方の図のオブジェクトとの関連付けが必要です。
どうすればいいのですか?
c# - DBMLオブジェクトをアルファベット順にソートする方法は?
私のプロジェクトには、すべての LinqToSql オブジェクトを含む DBML ファイルがあります。最初に DB からインポートしましたが、すべて問題ありませんでした。現在、DB が拡大しているため、O/R デザイナーのダイアグラムに新しいテーブルを追加していますが、常に XML の末尾に追加されます。外部キーを定義するとき、使用可能なテーブルが常に XML に表示される順序でリストされるため、これは少し面倒です。
テーブル名に従ってXMLテーブル宣言をアルファベット順にソートする方法はありますか?
c# - インターフェイスを実装する LINQ to SQL クラス
LINQ to SQL (O/R) デザイナーを使用してアプリのデータ モデルを設計していますが、(多くの) クラスでインターフェイスまたは基本クラスを実装し、実装されたフィールドの値を DB に格納することは可能ですか?
すべてではないにしてもほとんどのクラスで、オブジェクトに関するメタデータを記述する共通フィールドを保存する必要があります。たとえば、オブジェクトが作成された日時と作成者、オブジェクトが削除されたかどうか、最後に変更された日時などです。これらのフィールドの値理想的には、データベース内の実装クラスのテーブルの列に入るだけです。
.dbml ファイルでグローバル基本クラスまたはインターフェイスを指定するオプションは知っていますが、インターフェイスを実装しない L2S クラスがいくつかあるため、あまり洗練されていません。
これはNHibernateのようなもので簡単にできることを知っています。LINQ to SQL を使用してエレガントな方法でこれを行う方法があるかどうかを確認したいと思います。
ポインタはありますか?