DevForce导航属性问题

时间:2018-02-15 16:13:31

标签: c# devforce

我们目前正在重写我们的应用程序,我们有数百个表,每个表都有一个CreatedById和ModifiedById,每个表都有一个用户表的外键,大约是该表的411 FKey / Nav属性。

我们使用DevForce和EF进行数据库访问/实体管理,在从当前应用程序迁移到新应用程序的一些测试中,我们在序列化程序中遇到错误/堆栈溢出和/或极长的加载时间(5秒) 2000个实体)。

我创建了一个测试应用程序,它具有相同数量的表但删除了所有411个FKeys,并且将负载降低到一秒以下,序列化错误也消失了。

我现在遇到的问题是我确实需要使用点导航/导航道具从许多其他实体到达用户表,所以我想知道是否有人知道如何通过代码将这些添加到好友类。< / p>

我已经google了,确实找到了一个旧的DevForce论坛帖子,提到了一些示例代码,但没有链接到实际样本。

如果有人有任何想法/建议,我会非常感激。

提前致谢

1 个答案:

答案 0 :(得分:0)

我很好奇为什么您会看到序列化错误和加载时间不佳。如果您有时间,请在DevForce support网站上打开一个支持案例,其中包含其他信息,以便我们查看。

添加手动编码导航属性的最简单方法是使用实​​体类是部分类的事实。 &#34;好友&#34; class更倾向于为属性属性提供覆盖,因此不适合这里。

要手动编码导航属性,一个简单的例子(没有验证)可能如下所示:

public partial class Customer {

  private User _creationUser;
  public User CreationUser {
    get {
      if (_creationUser == null) {
        var query = new EntityKeyQuery(new EntityKey(typeof(User), this.CreatedById));
        _creationUser = this.EntityAspect.EntityManager.ExecuteQuery(query).Cast<User>().FirstOrDefault();
      }
      return _creationUser;
    }
    set {
      _creationUser = value;
      this.CreatedById = _creationUser.UserId;
    }
  }
}

这里的问题是你有数百个需要这些属性的实体类,所以在你的其他实体扩展的基础实体类上实现这些是一个好主意。 DevForce Resource Center提供了有关使用基本实体类的更多信息。

另一种选择是覆盖模板生成以在每个实体上生成自定义属性。刚果民主共和国也有一些相关信息。