0

データベース用の ADO .Net Entity Data Model があります。このモデルには、関連する 3 つのテーブルがあります。 UserId とその他の詳細を含む「Users」テーブル。RunId、ApproverId およびその他の詳細を含む「Run」テーブル UserId および RunId 列を含む「RunToUser」

関係は次のとおりです。 Users.UserId は Run.ApproverId との 1 対 1 の関係です User.UserId は RunToUser.UserId との多対多です Run.RunId は RunToUser.RunId との多対多です

エンティティ モデルでは、これは 2 つの別個のリレーションシップを持つ 2 つのテーブルとして表現されます。Users と Run の間の 1 対 1 の関係と多対多の関係。

RunのデータとUsersの関連データを編集したいASP.net Formviewがあります。

ほとんどの場合、データバインディングは機能しています。ただし、ユーザー テーブルにエンティティ データ ソースとしてバインドすると、常に 1 対 1 の関連付けが使用されます。

1 対 1 マッピングからラベルへ、多対多マッピングからデータビューへのデータをバインドできるように、entitydatasource に特定の関係関連付けを強制的に使用させるにはどうすればよいですか?

レコードを制限するwhere句で「EXISTS」を試しましたが、常に1対1を使用することを主張し、すべてのデータバインドコントロールで単一のユーザーのみを表示します。ユーザーのエンティティデータソースは次のとおりです。

  <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>

ラベル用とグリッドビュー用の 2 つのエンティティ データ ソースが必要になると思いますが、関連付けを指定する方法を決定するまで、先に進む方法がわかりません。Thx、-J

4

2 に答える 2

3

答えを見つけて質問を閉じるのを忘れたので、フォローアップしました。

同じ外部テーブルに複数の関連付けがある場合、デフォルトで数値のサフィックスが付けられることを発見しました。したがって、RunテーブルにはUsersとUsers1の関連付けがありました。EDSの「インクルード」パラメーターを使用する場合、EDSモデルを調べるまで、どの関連付けを使用するかを知る必要があります。

私は、数字の接尾辞を持つすべての関連付けの名前を変更することを考えました。My Runテーブルに、UsersとApprover(Users1ではなく)の関連付けが追加されました。これにより、LINQとEDSの両方の宣言部分に含める関係を簡単に解読できます。

EDSに両方の関連付けを含めたい場合は、次のようにします。

Include="Users,Approver"

最初はあまり明白ではなかったので、これが他の誰かに役立つことを願っています。

于 2009-08-14T20:29:02.243 に答える
0

データベースに 1 対 1 のリレーションシップがある場合は、エンティティ モデルでこれら 2 つのテーブルが 1 つのテーブルとして表示されるように、エンティティ モデルを構築できます。

このようにビルドすると、バインディングがはるかに簡単になります。

于 2009-07-06T19:33:31.777 に答える