silverlight加载导航属性的问题!求助!
在添加Ado.Net实体模型后自动生成的实体类的导航属性上加上[Include]
并在查询方法中使用Include("子表")可以加载指定的导航属性。
- C# code
internal sealed class CompanysMetadata { // 元数据类不会实例化。 private CompanysMetadata() { } public Nullable<short> AddAccountId { get; set; } public Nullable<DateTime> AddTime { get; set; } public short CompanyId { get; set; } public Nullable<short> CompanyLevel { get; set; } public string CompanyName { get; set; } [Include] public EntityCollection<Departments> Departments { get; set; } //添加Include关键字 public Nullable<DateTime> LastUpdateTime { get; set; } public Nullable<short> ParentId { get; set; } public string Remark { get; set; } } }- C# code
// TODO: // 考虑约束查询方法的结果。如果需要其他输入, //可向此方法添加参数或创建具有不同名称的其他查询方法。 // 为支持分页,需要向“Companys”查询添加顺序。 public IQueryable<Companys> GetCompanys() { return this.ObjectContext.Companys.Include("Departments"); //查询公司时加载部门子表 }- C# code
AccountsDomainContext context = new AccountsDomainContext(); context.Load(context.GetCompanysQuery(), callback => { if (!callback.HasError) { dataGrid1.ItemsSource = callback.Entities; //这时查询的结果的导航属性Departments已经赋值 } }, null);当一个表有非常多的子表,甚至子表还有子表时,如果查询比较详细的信息需要Include非常多子表。这时跟踪SQL服务器发现系统将LINQ转换成的sql命令非常长,查询消耗的时间也非常多,甚至让IE假死......请教大家是不是我这方法不对?大家在实际开发中是如何解决这样的问题的?谢谢。
[解决办法]
实际开发中直接使用WebService处理即可。你这种情况子表太多不利于实体模型对应。
简单处理更好一些。