0

RIA サービスを使用して、DomainService クラスから XAML コード ビハインドに IQueryable をプルしようとしています。

DomainService は BLL から取得し、BLL は DAL から取得し、EF から取得します。

XAML では外部テーブルにアクセスできないようですが、DomainService メソッドでは問題なくアクセスできます。

DomainService メソッドは次のようになります...

    public IQueryable<MenuHeader> GetMenuHeaders()
    {
        BusinessLogic.Employee blEmployee = new BusinessLogic.Employee();

        int employeeId = blEmployee.GetEmployeeIdFromUserName(HttpContext.Current.User.Identity.Name);
        var menuHeaders = blEmployee.GetEmployeeMenuHeaders(employeeId);
        // This works here!
        var menuHeaderItems = from mh in menuHeaders
                              select mh.MenuHeaderItems;
        return menuHeaders;
    }

XAML コード ビハインドでは、このメソッドをここで呼び出します。

...

EmployeeContext employeeContext = new EmployeeContext();

EntitySet<MenuHeader> menuHeaders = employeeContext.MenuHeaders;            
employeeContext.Load(employeeContext.GetMenuHeadersQuery()).Completed += (s, e) =>
    {
        // This does NOT work here!
        var menuHeaderItems = from mh in menuHeaders
                              select mh.MenuHeaderItems; // <-- Not found
    };

...

このテーブルを XAML コードまで取得して、データバインドできるようにするにはどうすればよいですか?

4

2 に答える 2

0

送信コードと受信コードは完全に正しいように見えます。サーバー側がテスト コードのエンティティを正しく返している場合は、何かがひどく間違っています。いくつかのバリエーションを試しましたが、同様のコードが失敗することはありませ

余談ですが、RIA サービスから返されたコレクションにアクセスするには、次の 3 つのオプションがあります。

1.コンテキストで特定のコレクションを使用します(行ったように)

EntitySet<MenuHeader> menuHeaders = employeeContext.MenuHeaders;
... // On Completed event
var menuHeaderItems = from mh in menuHeaders
                          select mh.MenuHeaderItems;

2. ロード操作の Entities プロパティを使用する

EmployeeContext employeeContext = new EmployeeContext();
var LoadOp = employeeContext.Load(employeeContext.GetMenuHeadersQuery());
// Bind to LoadOp.Entities

3. Load() コールバック パラメータを使用する

EmployeeContext employeeContext = new EmployeeContext();
var LoadOp = employeeContext.Load(employeeContext.GetMenuHeadersQuery(),
      (cb) => 
      {
            // do something with cb.Entities here
      }, 
      false);

私は、遅延バインディングにはバージョン 2 を、任意のカスタム応答にはバージョン 3 を好みます (コード行を抑えるため)。

于 2010-11-12T23:13:18.537 に答える
0

ここでの問題は、Entity Model が ASP.Net/RIA アプリの一部ではないことです。でのみ参照されます。

これは参照であるため、DomainService はメタデータを自動生成しません。Silverlight が何を期待するかを認識できるように、メタデータを手動で作成する必要がありました。

于 2010-11-15T23:15:20.473 に答える