我需要将来自SQL Server数据库的一些数据分组,并且由于LightSwitch不支持该开箱即用,我根据Eric使用域服务Erhardt的guide。LightSwitch - 使用域名服务将所有请求批量加载到一个请求
但是我的表格包含几个外键,当然我希望在表格中显示正确的相关数据(就像在指南中做的那样只会显示关键值)。我解决了这个通过添加这样对我的新创建实体的关系:
我的域服务类看起来是这样的:
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; }
}
}
它的工作原理和所有的,无论是国家名称并且Basefield会自动加载自动完成框,但它需要很长时间。使用两列需要5-10秒来加载一个页面......并且我还有10个列我还没有实现。
花费这么长时间的原因是因为每个相关数据(每个Country和BaseField)都需要一个请求。加载页面看起来像这样的小提琴手:
这是不能接受的话,那应该是所有这些电话合并为一的方式,就像它加载同桌没有去的时候呢通过域服务。
所以..这是很多解释,我的问题是:有什么办法可以使所有相关数据一次加载或通过任何其他方式提高性能?它不应该花10+秒来加载一个屏幕。
感谢任何帮助或输入!小号