我们目前正在重写我们的应用程序,我们有成百上千的表,每个表都有一个CreatedById和ModifiedById,每个表都有一个指向用户表的外键,大约有411个FKey / Nav属性指向该表。
我们使用DevForce和EF进行DB访问/实体管理,在从当前应用程序迁移到这个新应用程序的一些测试过程中,我们在序列化程序中遇到错误/堆栈溢出和/或极长的加载时间( 2000个实体需要5秒)。
我创建了一个测试应用程序,它有相同数量的表,但删除了所有411个FKeys,它将负载降到了不到一秒,序列化错误也消失了。
我现在的问题是,我确实需要使用点导航/导航属性从许多其他实体访问users表,所以我想知道是否有人知道如何通过代码将这些添加到伙伴类中。
我用谷歌搜索了一下,确实找到了一个旧的DevForce论坛帖子,里面提到了一些做这件事的样例代码,但没有链接到实际的样例。
如果任何人有任何想法/建议,我将不胜感激。
提前感谢
发布于 2018-02-16 03:02:24
我很好奇为什么你会看到序列化错误和糟糕的加载时间。如果您有时间,请在DevForce support站点上打开一个包含其他信息的支持案例,以便我们可以查看它。
添加手工编码的导航属性的最简单方法是利用实体类是分部类这一事实。“伙伴”类更多的是为了提供属性属性的重写,所以在这里不太合适。
要手动编写导航属性,一个简单的示例(不经过验证)可能如下所示:
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提供了有关使用基本实体类的更多信息。
另一种选择是覆盖模板生成,以在每个实体上生成自定义属性。DRC也有一些关于这方面的信息。
https://stackoverflow.com/questions/48811632
复制相似问题