0

我需要对 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 多秒。

感谢您的任何帮助或输入!

4

1 回答 1

0

与不使用它们相比,我的 RIA 服务查询速度非常快,即使在我进行聚合时也是如此。这可能是因为您使用的是“虚拟关系”(您可以通过表之间的虚线来判断),这是您使用 RuleEntryTest 实体创建的。

为什么在您开始创建 RIA 实体之前,您的原始RuleEntry实体与 LightSwitch 中的CountryBaseUnit都不相关?

我没有使用 Fiddler 来查看发生了什么,但我会尝试创建“真实”关系,而不是“虚拟”关系,并查看这是否有助于您的 RIA 实体的性能。

于 2013-05-06T16:07:50.653 回答