我需要对 SQL Server 数据库中的一些数据进行分组,并且由于 LightSwitch 不支持开箱即用,我根据 Eric Erhardt 的指南使用域服务。
但是我的表包含几个外键,当然我希望在表中显示正确的相关数据(就像在指南中那样做只会显示键值)。我通过向我新创建的实体添加一个关系来解决这个问题,如下所示:
我的域服务类如下所示:
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)都需要一个请求。在 Fiddler 中加载页面如下所示:
这根本是不可接受的,它应该是一种将所有这些调用组合成一个的方式,就像它在不通过域服务加载同一个表时所做的那样。
所以..这解释了很多,我的问题是:有什么方法可以一次加载所有相关数据或通过任何其他方式提高性能?加载屏幕不应花费 10 多秒。
感谢您的任何帮助或输入!