我在使用CRM2011时遇到了麻烦:
当代码尝试使用IOrganizationService通过linq查询从数据库检索数据时,在Active Directory中创建的所有新用户都表现不佳。新用户拥有与旧用户相同的权利。
以下是一些可以更好理解的代码。 Activity是一个ActivityPointer,我尝试将所有附件链接到它:(缓慢的部分是当我尝试使用ActivityAttachments属性中的一个项目时)
foreach (var attachment in activity.ActivityAttachments)
{
//Do stuff
}
ActivityAttachments是使用datacontext
的linq查询的结果 public IEnumerable<ActivityMimeAttachment> ActivityAttachments
{
get { return Datacontext.ActivityMimeAttachmentSet.Where(a => a.ObjectId != null && a.ObjectId.Id == Id).Select(a => new ActivityMimeAttachment(a)); }
}
和datacontext是我的datamodel - 为每个用户创建和存储,作为我的crmservice,我的organizationservice实例
private static readonly ConcurrentDictionary<string, LeDataModel> _dataModels = new ConcurrentDictionary<string, LeDataModel>();
protected LeDataModel Datacontext
{
get
{
LeDataModel _model;
if (HttpContext.Current != null)
{
var currentUser = HttpContext.Current.User.Identity.Name;
if (!_dataModels.TryGetValue(currentUser, out _model))
{
_model = new LeDataModel(CrmService) { MergeOption = MergeOption.NoTracking };
_dataModels.TryAdd(currentUser, _model);
}
}
else
{
_model = AdminDataContext;
}
return _model;
}
}
protected OrganizationService CrmService
{
get
{
OrganizationService _service;
if (HttpContext.Current != null)
{
var currentUser = HttpContext.Current.User.Identity.Name;
if (!_services.TryGetValue(currentUser, out _service))
{
_service = new OrganizationService("Crm");
_services.TryAdd(currentUser, _service);
}
}
else
{
_service = AdminCrmService;
}
return _service;
}
}
我认为,问题不在于代码,因为它适用于某些用户,对新用户来说速度很慢。 我比较了CRM和AD中的新旧用户,一切看起来都是平等的。 有人知道CRM如何完成身份验证吗? 你有其他想法吗?
答案 0 :(得分:0)
根据您对新用户如何遭受与旧用户相同的例外的评论,除了更多用户之外,我认为这是导致新用户出现性能问题的原因。
查找异常原因并修复它们,您的性能应该提高。
阅读此http://blogs.msdn.com/b/ricom/archive/2006/09/25/771142.aspx
和这个