1

以前のコード ビハインド作業を置き換えようとしている EntityDataSource があります。私の EntityDataSource は次のようになります。

    <asp:EntityDataSource 
        runat="server" 
        ID="personDataSource" 
        ContextTypeName="Model.GuidesEntities" 
        EntitySetName="CharacterFavorites" 
        OrderBy="it.Person.FullName" 
        Select="it.Person.Id" 
        Where="it.UserName = @userName" />

実際に使用すると、次のエラーが表示されます。

'Person' は、現在読み込まれているスキーマのタイプ 'Transient.rowtype[(Id,Edm.Int32(Nullable=True,DefaultValue=))]' のメンバーではありません。

EntityDataSource はリレーションシップのウォークをサポートしていませんか? EntityDataSource でこれを行うにはどうすればよいでしょうか?

また、@userNameパラメータは今のところコード ビハインドに追加されています。WhereParameters コレクションでユーザー名パラメーターを直接指定する方法を知っている人のための追加ポイント。

4

3 に答える 3

2

EFはここで「スーパーレイジーローディング」を使用します(私自身の用語)。関連する「Person」オブジェクトに自動的に到達して取得することはありません。entotyDataSource内で、使用可能にする他のオブジェクトを指定する必要があります。したがって、次の行を追加する必要があります: "Include="Person"。以下を参照してください。

 <asp:EntityDataSource 
        runat="server" 
        ID="personDataSource" 
        ContextTypeName="Model.GuidesEntities" 
        EntitySetName="CharacterFavorites" 
        OrderBy="it.Person.FullName" 
        Select="it.Person.Id" 
        Where="it.UserName = @userName" 
        Include="Person"  />

複数の関連付けを追加する必要がある場合は、コンマで区切ります。Include = "Person、Dog、Chicken、SalesOrder"また、Where句では "=="not"="です。

于 2011-02-11T21:28:55.350 に答える
1

現在のユーザー名をマークアップのWhereパラメーターとして取得できる標準の定義済みパラメータータイプはありません(あなたが話していると思いますUser.Identity.Name)。のような単純なもの...

<asp:Parameter Name="userName" DefaultValue='<%# User.Identity.Name %>' />

...パラメータコントロールでデータバインディング構文を使用できないため、残念ながら機能しません。

ただし、カスタムパラメータを作成することはできます。(そのページの後半には、「ユーザー名パラメーター」の具体例があります。)

例外を除いてあなたの問題に:私はEntityDataSourceでナビゲーションプロパティで「it-Syntax」をたくさん使用しています、そしてそれはあなたの例と多かれ少なかれ正確に見えます。モデルを詳しく確認しないと、エラーの原因を特定するのは困難です。ただし、一般的に、EntityDataSourceのプロパティをナビゲートすることはサポートされており、機能します。

于 2010-06-12T14:26:36.427 に答える
0
   protected void MyNotesSelecting(object sender, EntityDataSourceSelectingEventArgs e)
            {
                e.DataSource.Where = "it.UserName=="+User.Identity.Name
            }
于 2012-01-27T14:37:04.193 に答える