我们目前正在重写我们的应用程序,我们有数百个表,每个表都有一个CreatedById和ModifiedById,每个表都有一个用户表的外键,大约是该表的411 FKey / Nav属性。
我们使用DevForce和EF进行数据库访问/实体管理,在从当前应用程序迁移到新应用程序的一些测试中,我们在序列化程序中遇到错误/堆栈溢出和/或极长的加载时间(5秒) 2000个实体)。
我创建了一个测试应用程序,它具有相同数量的表但删除了所有411个FKeys,并且将负载降低到一秒以下,序列化错误也消失了。
我现在遇到的问题是我确实需要使用点导航/导航道具从许多其他实体到达用户表,所以我想知道是否有人知道如何通过代码将这些添加到好友类。< / p>
我已经google了,确实找到了一个旧的DevForce论坛帖子,提到了一些示例代码,但没有链接到实际样本。
如果有人有任何想法/建议,我会非常感激。
提前致谢
答案 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提供了有关使用基本实体类的更多信息。
另一种选择是覆盖模板生成以在每个实体上生成自定义属性。刚果民主共和国也有一些相关信息。