0

シナリオ

現在、ac#Silverlightビジネスアプリケーションを使用しています。アプリケーションは、ADO.Netエンティティフレームワークとドメインサービスクラスを使用してAsp.netでホストされ、SQLサーバーデータベースとの間で読み取り/書き込みを行います。

セットアップ

クライアントUI

私のSilverlightクライアントインターフェイスには、クエリを使用して検索に関連するアイテムのリストを取得するオートコンプリートボックスがあります。クエリは私のドメインサービスクラスにあり、次のようになります。

public IQueryable<Status> GetStatus()
        {
            var q = (from job in Context.Job
                     select job.Status).Distinct()
                    .Select(deliveryState => new Status
                    {
                        DeliveryState = deliveryState,
                        Count = Context.Job.Count
                            (job => job.Status.Trim() == deliveryState.Trim())
                    });
            q = q.Where(job => job.DeliveryState != null);
            return q;
        }

コードビハインド

次に、silverlightクライアントインターフェイスのxamlページのコードビハインドで、次のコードを使用してクエリをコンストラクターにロードします。

var context = dds.DomainContext as InmZenDomainContext;
            statusFilterBox.ItemsSource = context.Status;
            context.Load(context.GetStatusQuery(), (lo) =>
            {
                //just to show you how to load..  
                //new  ErrorWindow("Loaded.." + lo.Entities.Count()).Show(); 
            }, null);

問題

私が抱えている問題は、クライアントインターフェイスに別のオートコンプリートボックスを追加し、別のGetクエリを追加して別の種類の検索を実行するとどうなるかということです。

public IQueryable<ShortCode> GetShortCode()
        {
            var q = (from job in Context.Job
                     select job.ShortCode).Distinct()
                    .Select(name => new ShortCode
                    {
                        Name = name,
                        Count = Context.Job.Count
                            (job => job.ShortCode.Trim() == name.Trim())
                    });
            q = q.Where(job => job.Name != null);
            return q;
        }

この問題は、「Context.Load()」関数が複数のクエリの読み込みをサポートしていないために発生します。また、「Context.Load()」を分離することを宣言しようとすると、そのうちの1つだけが機能します.......。

どうすればこれを回避できますか!?!

4

2 に答える 2

1

これはあなたの質問に対する一種の間接的な答えですので、それを取るか、それを残してください。

1つの画面に複数のAutoCompleteBoxがありますが、DDSを使用していません。私はずっと前に問題にぶつかり続けたときにDDSをあきらめました。ddsについて私が気に入らない主な点は、ロジックの多くがビューにあることです。

私がしていることは、ACBをエンティティに直接バインドし、カスタムフィルターを使用して複雑な検索を実行することです。検索するリストは、getコマンドを使用して入力したエンティティリストです。

public EntityList<Person> Person
        {
            get { return _DomainContext.Persons; }
        }

もっと詳しく説明することもできますが、DDSの使用に固執している場合は、そのままにしておきます。

于 2009-10-05T20:20:02.493 に答える
0

ロードごとに1つのエンティティタイプがありますが、複数のロードを同時に実行しても問題はありません。Fiddlerをインストールして、実際にネットワーク上で何が起こっているかを監視していますか?

于 2009-10-06T21:07:43.533 に答える