SQL Server データベースからいくつかのデータをグループ化する必要があります。LightSwitch はすぐに使用できる機能をサポートしていないため、Eric Erhardt のガイドに従ってドメイン サービスを使用します。
ただし、私のテーブルにはいくつかの外部キーが含まれており、もちろん、正しい関連データをテーブルに表示したいと考えています (ガイドのようにするだけで、キー値のみが表示されます)。次のように、新しく作成したエンティティに関係を追加することでこれを解決しました。
私の Domain Service クラスは次のようになります。
public class AzureDbTestReportData : DomainService
{
private CountryLawDataDataObjectContext context;
public CountryLawDataDataObjectContext Context
{
get
{
if (this.context == null)
{
EntityConnectionStringBuilder builder = new EntityConnectionStringBuilder();
builder.Metadata =
"res://*/CountryLawDataData.csdl|res://*/CountryLawDataData.ssdl|res://*/CountryLawDataData.msl";
builder.Provider = "System.Data.SqlClient";
builder.ProviderConnectionString =
WebConfigurationManager.ConnectionStrings["CountryLawDataData"].ConnectionString;
this.context = new CountryLawDataDataObjectContext(builder.ConnectionString);
}
return this.context;
}
}
/// <summary>
/// Override the Count method in order for paging to work correctly
/// </summary>
protected override int Count<T>(IQueryable<T> query)
{
return query.Count();
}
[Query(IsDefault = true)]
public IQueryable<RuleEntryTest> GetRuleEntryTest()
{
return this.Context.RuleEntries
.Select(g =>
new RuleEntryTest()
{
Id = g.Id,
Country = g.Country,
BaseField = g.BaseField
});
}
}
public class RuleEntryTest
{
[Key]
public int Id { get; set; }
public string Country { get; set; }
public int BaseField { get; set; }
}
}
それは機能し、国名とベースフィールドの両方がオートコンプリートボックスでロードされますが、非常に長い時間がかかります. 2 つの列があると、1 つのページを読み込むのに 5 ~ 10 秒かかります。まだ実装していない列が 10 個あります。
時間がかかるのは、関連する各データ (各 Country および BaseField) に 1 つの要求が必要だからです。ページの読み込みは、Fiddler では次のようになります。
これはまったく受け入れられません。ドメイン サービスを介さずに同じテーブルをロードする場合と同様に、これらすべての呼び出しを 1 つに結合する方法であるべきです。
だから..それは多くの説明でした, 私の質問は: 関連するすべてのデータを一度にロードしたり、他の方法でパフォーマンスを向上させる方法はありますか? 画面の読み込みに 10 秒以上かかることはありません。
ヘルプやご意見ありがとうございます。