EntityDataSourceとの結合複数の関係
-
21-08-2019 - |
質問
私は自分のデータベースのADO。ネットエンティティデータモデルを持っています。このモデルでは、私は3つの関連するテーブルを持っています: 「ユーザー」表ユーザーIDおよびその他の詳細を含みます。 RUNID、ApproverIdおよびその他の詳細が含まれている「ファイル名を指定して実行」表 ユーザーIDとRUNID列が含まれている "RunToUser"
次のようにの関係は以下のとおりです。 Users.UserIdはRun.ApproverIdに1対1の関係であります User.UserIdはRunToUser.UserIdで多くに多くであります Run.RunIdはRunToUser.RunIdで多くの多くのです。
エンティティモデルでは、これは2つの独立した関係を持つ2つのテーブルとして表現されます。 1対1の関係とユーザーとファイル名を指定して実行間の多対多の関係ます。
私は実行中のデータだけでなく、ユーザーが関連するデータを編集したいASP.net FormViewコントロールを持っています。
データバインディングは、ほとんどの場合で働いています。私はentitydatasourceとしてユーザーテーブルと結合するときしかし、それは常に1対1の関係団体を使用しています。
どのように私はデータビューにラベルに1対1のマッピングからのデータを結合して、多対多のことができるように特定の関係団体を使用するentitydatasourceを強制することができますか?
私はレコードを制限するが、それはまだ、常に1対1を使用して主張しているだけで、すべてのデータバインドさのコントロールで単一のユーザーを表示whichs where句に「EXISTS」試してみました。ここではユーザーのためのentitydatasourceがあります:
<asp:EntityDataSource ID="edsUsers_DET" runat="server"
ConnectionString="name=MyEntities" DefaultContainerName="MyEntities"
EntitySetName="Users"
Where="EXISTS(SELECT VALUE p FROM it.Run AS p WHERE p.RunID = @RunID)" >
<WhereParameters>
<asp:ControlParameter ControlID="fvRun" Name="RunID" Type="Int32" />
</WhereParameters>
</asp:EntityDataSource>
私はラベル用とGridViewのための第二の2つのエンティティのデータソースを必要とするが、私は私がさらに進行するのか分からない関連付けをspecifiyする方法を決定知るまでになると仮定します。 どうも、 -J
解決
私は答えを見つけ、質問を閉じるのを忘れて以来、ちょうど以下ます。
私はあなたが同じ外部テーブルで複数のアソシエーションを持っているとき、彼らはデフォルトで数字の接尾辞を獲得することを発見しました。だから、実行テーブルにはユーザーとユーザー1の関連付けを持っていました。あなたはEDSのために、「含める」パラメータを使用すると、あなたはEDSのモデルに見えるまで明らかイマイチどの使用する協会知っている必要があります。
私は、数値サフィックスを持っていた名前を変更し、すべての私の団体思っ行ってきました。私の実行テーブルは現在のユーザーと承認者(代わりに、ユーザー1の)関連性を持っています。これは私が簡単にLINQとEDSの宣言的部分の両方に含まれるようにリレーションシップを解読することができます。
私はのような何かをするだろうEDSのための両方の関連を含めたい場合:
Include="Users,Approver"
は、それが最初に私には非常に明白ではなかったので、これは他の誰かを助けることを望みます。
他のヒント
あなたは、データベース内の1対1の関係を持っている場合は、この2つのテーブルがあなたのエンティティモデルにおける単一のテーブルのように見えるようにあなたのエンティティモデルを構築することができます。
あなたはこのようにそれを構築する場合は、は、あなたの結合がはるかに簡単になります。