рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рдПрдордПрд╕ рд╕реАрдЖрд░рдПрдо рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА ... рдПрдордПрд╕рдбреАрдПрди рдореЗрдВ рдорд╛рдирдХ рдХреНрд╡реЗрд░реА рддрдВрддреНрд░реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛, рдФрд░ рдЪреВрдВрдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд▓рдВрдмреА рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдВрддрд╣реАрди (рдЖрдВрддрд░рд┐рдХ рд╕реНрд╡рдЪрд╛рд▓рди) рд╣реЛрдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдХреНрд╡реЗрд░рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЕрдкрдиреЗ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ рд╢реНрд░рдо рд▓рд╛рдЧрддреЛрдВ рдореЗрдВ рдЧрдВрднреАрд░ рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреА рдФрд░ рдЕрд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрдг рдЧрд▓рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдЬрдирди рдЖрдзрд╛рд░ рдмрди рдЬрд╛рдПрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдХреНрд╕рд░ рдмрджрд▓ рдЬрд╛рдПрдВрдЧреЗ - рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рд╕рдордп рд╣реИ рд╡рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред
рдЗрд╕рд▓рд┐рдП, QueryExpression рдкрд░ рдПрдХ рдЖрд╡рд░рдг рд▓рд┐рдЦрдиреЗ рдФрд░ EF рдХреЗ рд░реВрдк рдореЗрдВ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рд╢реНрди рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реЗрдВ рдХрд┐ рдЗрд╕ рдЖрд╡рд░рдг рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп (рдХрд╣реАрдВ рдмреАрдЪ рдореЗрдВ) рдореБрдЭреЗ sdk рд╕реЗ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ -
sdk crm рдЧреНрд░рд╛рд╣рдХ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рджреЗрдЦрдиреЗ рдкрд░ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдХреЛрдИ рдкреНрд░рд▓реЗрдЦрди рдирд╣реАрдВ рд╣реИ (!!!) рдФрд░ рдХрдИ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП !!! : рдЬрд╣рд╛рдВ, рдЬрд╣рд╛рдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдХреБрдЫ рдЫреЛрдЯреЗ рд╡рд╛рд▓реЗ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдореИрдВ рдПрдХ рддреБрд▓рдирд╛рддреНрдордХ рддрд╛рд▓рд┐рдХрд╛ рдмрд╛рдж рдореЗрдВ рджреВрдВрдЧрд╛ред
рдЪреВрдВрдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд▓рдВрдмреА рд╣реЛрдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ ...
рдЙрджреНрджреЗрд╢реНрдпреЛрдВ:
- рдЖрд╡рд╢реНрдпрдХ CRM рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ DataContract рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рддрд╛рдХрд┐ рдЬрдм рдлрд╝реАрд▓реНрдб рдмрджрд▓рддреЗ / рд╣рдЯрд╛рддреЗ / рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛
- рдордЬрдмреВрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CRM рдХреЛ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рд╢реНрди рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ, рдФрд░ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдпрд╛ рдмрджрд▓рдиреЗ рд╕реЗ рдЕрдзрд┐рдХрддрдо рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░реЗрдВ
- рд╕реАрдЖрд░рдПрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдо рд╕реЗрдЯ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдпрд╛рддрд╛рдпрд╛рдд рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ (рдЪрдпрди рдХрд░реЗрдВ, рдЬреБрдбрд╝реЗрдВ, рдХрд╣рд╛рдВ, рдЖрджрд┐)ред
- CRM рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рднреВрдорд┐рдХрд╛-рдЖрдзрд╛рд░рд┐рдд рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ ASP.NET рдкреНрд░рддрд┐рд░реВрдкрдг)
рдЖрдЦрд┐рд░рдХрд╛рд░ рдХреНрдпрд╛ рд╣реБрдЖ:
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдХ рдЕрд╕реЗрдВрдмрд▓реА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ - microsoft.xrm.sdk.dll, рдЬреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдЧреНрд░рд╛рд╣рдХ
рдЕрд╕реЗрдВрдмрд▓реА рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ - CrmClientBaseред рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рд╕рд╛рд░ рдХреНрд╖реЗрддреНрд░ рд╣реИ рдЬрд┐рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
protected abstract IWcfCrmClient WcfClient { get; }
IWcfCrmClient рдПрдХ WCF рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рд╕реЗрд╡рд╛ рд╕рдВрджрд░реНрдн рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдЪрд╛рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рд╡рд░реНрдЧ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ (рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ, рд╕рд╣реА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ):
using System; using CrmClient; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Query; using MsCrmClientTest.MSCRM; public class OrgCrmClient : CrmClientBase { private class WcfCrmClient : IWcfCrmClient { private OrganizationServiceClient _client; public Guid Create(Entity entity) { return _client.Create(entity); } public void Update(Entity entity) { _client.Update(entity); } public void Delete(string entityName, Guid id) { _client.Delete(entityName, id); } public EntityCollection RetrieveMultiple(QueryBase query) { return _client.RetrieveMultiple(query); } public OrganizationResponse Execute(OrganizationRequest request) { return _client.Execute(request); } public void Close() { _client.Close(); } public WcfCrmClient() { _client = new OrganizationServiceClient(); } } private IWcfCrmClient _wcfClient; protected override IWcfCrmClient WcfClient { get { if (_wcfClient == null) _wcfClient = new WcfCrmClient(); return _wcfClient; } } }
OrganizationServiceClient рд╕реЗрд╡рд╛ рд╕рдВрджрд░реНрдн рд╕реЗ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рд╣реИ
рдорд╛рдирдЪрд┐рддреНрд░рдг
рд╕реАрдЖрд░рдПрдо рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдореИрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдбреЗрдЯрд╛ рдЕрдиреБрдмрдВрдз рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛)ред рдЗрд╕рдХреЗ рд▓рд┐рдП 2 рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реИрдВ (microsoft.xrm.sdk.dll рдЕрд╕реЗрдВрдмрд▓реА рд╕реЗ рдорд╛рдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ)
- EntityLogicalNameAttribute (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо) - CRM рдореЗрдВ рдЗрдХрд╛рдИ рдХрд╛ рдирд╛рдо рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ
- AttributeLogicalNameAttribute (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо) - CRM рдореЗрдВ рдЗрдХрд╛рдИ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдирд╛рдо рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ
рдпрджрд┐ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╡рд░реНрдЧ рдирд╛рдо / рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо CRM рдореЗрдВ рдЗрдХрд╛рдИ / рдлрд╝реАрд▓реНрдб рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛ рдЕрдиреБрдмрдВрдз рдХреЛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ CrmDataContractBase рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдПрдХ рд╕рд╛рд░ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рд╛рд░ рд╕рдВрдкрддреНрддрд┐ рд╣реИред
public abstract Guid Id { get; set; }
рдЬрд┐рд╕реЗ рдЕрддрд┐рд░рдВрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рднреА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрджрд╛рд╣рд░рдг рдбреЗрдЯрд╛ рдЕрдиреБрдмрдВрдз:
[EntityLogicalName("systemuser")] public class User : CrmDataContractBase { [AttributeLogicalName("systemuserid")] public override Guid Id { get; set; } [AttributeLogicalName("fullname")] public string Name { get; set; } [AttributeLogicalName("parentsystemuserid")] public EntityReference hief { get; set; } [AttributeLogicalName("caltype")] public OptionSetValue CALType }
рдорд╣рддреНрд╡рдкреВрд░реНрдг!- рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп CRM рдЗрдХрд╛рдИ (рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореБрдЦреНрдп рдХреЗ рд░реВрдк рдореЗрдВ) рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИ, рддреЛ рдпрд╣ EntityReference рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
- рдпрджрд┐ рдкреНрд░реЙрдкрд░реНрдЯреА CRM рдПрдиреНрдпреВрдорд░реЗрд╢рди (рдЙрджрд╛рд╣рд░рдг рдореЗрдВ CALType) рд╕реЗ рдорд╛рди рд╣реИ, рддреЛ рдпрд╣ OptionSVVueue рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
CRM Enumerations рдореИрдкрд┐рдВрдЧ
рд╕реАрдЖрд░рдПрдо рдПрдиреНрдпреВрдорд░реЗрд╢рдВрд╕ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕реЗ CrmOptionsSetBase рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ EntityLogicalName рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ CRM рдореЗрдВ рдПрдиреНрдпреВрдорд░реЗрд╢рди рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
[EntityLogicalName("connectionrole_category")] public class ConnectionRoleCategoryEnum : CrmOptionsSetBase { }
CrmOptionsSetBase рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ IEnumerable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ CrmOption, рдЕрд░реНрдерд╛рддреНред рдЗрд╕реЗ рддреБрд░рдВрдд рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
CrmOption рд╡рд░реНрдЧ рдореЗрдВ 2 рдЧреБрдг рд╣реИрдВ:
public string Label { get; private set; } public OptionSetValue Value { get; private set; }
рд▓реЗрдмрд▓ рдореЗрдВ рддрддреНрд╡ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдирд╛рдо рд╣реИ, рдФрд░ рдорд╛рди CRM рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдбреЗрдЯрд╛ рдЕрдиреБрдмрдВрдз рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ OptionSetValue рд╣реИ
рдЧреНрд░рд╛рд╣рдХ рдЙрдкрдпреЛрдЧ
CRM рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ, рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ, рд╣рдЯрд╛рдПрдВ
рдпреЗ рд╕рд░рд▓ рдСрдкрд░реЗрд╢рди рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
[EntityLogicalName("new_nsi")] public class NSI : ICrmDataContract { [AttributeLogicalName("new_nsiid")] public override Guid Id { get; set; } [AttributeLogicalName("new_name")] public string Name { get; set; } }
рдорд╣рддреНрд╡рдкреВрд░реНрдг! рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рддреБрд░рдВрдд рд╕реАрдЖрд░рдПрдо рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдХреЛрдИ рд▓реЗрди-рджреЗрди рдирд╣реАрдВ рд╣реИ (рдореБрдЭреЗ рдЕрднреА рддрдХ рдЗрд╕рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рд╣реИ)
рд╕реАрдЖрд░рдПрдо рдирд╛рдорд╛рдВрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐ рд╣реИ
public T OptionsSet<T>()
рдЬрд╣рд╛рдВ T рдЕрдВрддрд░рдг рдХрд╛ рдбреЗрдЯрд╛ рдЕрдиреБрдмрдВрдз рд╣реИред рдЙрджрд╛рд╣рд░рдг (рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдбреЗрдЯрд╛ рд╕рдорддреБрд▓реНрдп):
var optionSet = _client.OptionsSet<ConnectionRoleCategoryEnum>();
Linq рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП CRM рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢реНрди
рдирд╛рдо рд╕реНрдерд╛рди CrmClient.Linq рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ CRM рдЕрдиреБрд░реЛрдз рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ:
- CrmSelect
- CrmWhere
- CrmJoin
- CrmOrder
- CrmPaging
- CrmDistinct
рдЗрд╕ рдирд╛рдо рд╕реНрдерд╛рди рд╕реЗ рд╡рд┐рдзрд┐рдпрд╛рдВ Crm рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВ, рддрд╛рдХрд┐ рдЖрдк рддреБрд░рдВрдд рджреЗрдЦ рд╕рдХреЗрдВ рдХрд┐ CRM рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд╣рд╛рдВ рдмрдирд╛ рд╣реИ рдФрд░ рдЬрд╣рд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдирд▓реЛрдб рдХреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИред
CRM рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдзрд┐ рдХреНрд╡реЗрд░реА рд╣реИ:
public ICrmQueryable<T> Query<T>()
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЕрдиреБрд░реЛрдз рдмрдирд╛рдиреЗ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
CRM рдЕрдиреБрд░реЛрдз рд╕реНрд╡рдпрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЬрдм GetEnumerator () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдЬрдм рдбреЗрдЯрд╛ рдХреЛ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдХрд┐ EF рдореЗрдВ)ред
рдЪреБрдирдирд╛
рдЕрдирд╛рдо рдкреНрд░рдХрд╛рд░
var users = _client.Query<CrmUser>() .CrmSelect(u => new { u.Id, u.Name, Test = 1 }) .ToList();
рд╡рд░реНрдЧ (рдИрдПрдл рдореЗрдВ, рдХрдХреНрд╖рд╛ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)
var users2 = _client.Query<CrmUser>() .CrmSelect(u => new TestUser() { Id = u.Id, FullName = u.Name, Test = 1 }) .ToList();
рдЬрд╣рд╛рдБ
рдорд╣рддреНрд╡рдкреВрд░реНрдг! 'рдЗрди' рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдПрдХ рд╕рд░рдгреА рдкрд╛рд╕ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЗрд╕ рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рд╣рдЯрд╛ рджреВрдВрдЧрд╛ред
рдпреМрдЧрд┐рдХ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕рдорд░реНрдерди рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ EF
тАЬWHEREтАЭ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рд╡рд┐рд╕реНрддрд╛рд░
рдореЗрдВ рдЗрдХрд╛рдИ рдврд╛рдВрдЪреЗ рдореЗрдВ рдпреМрдЧрд┐рдХ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП ):
var users = _client.Query<CrmUser>().ToList(); var directors = users.Where(u => u.Director != null).Select(u => new { u.Director.Id, u.Director.Name }).Take(2); var users2 = _client.Query<CrmUser>() .CrmWhere(ExpressionType.Or, directors, (u, d) => u.Id == d.Id && u.Name == d.Name, (pn, o) => { switch (pn) { case "Id": return o.Id; case "Name": return o.Name; default: return null; } }) .ToList();
рдХреНрд░рдо
var users = _client.Query<CrmUser>() .CrmOrderBy(i => i.Name) .CrmOrderByDescending(i => i.Id) .ToList();
рдкрд░рд┐рдгрд╛рдо рдирд╛рдо asc рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдлрд┐рд░ Id desc рджреНрд╡рд╛рд░рд╛
рдЕрд▓рдЧ
var users = _client.Query<CrmUser>() .CrmDistinct() .ToList();
рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ
C рдЪреАрдЬреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдирд╛ рдереЛрдбрд╝рд╛ рдФрд░ рдЬрдЯрд┐рд▓ рд╣реИ ... рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреЗ рдиреЗрддрд╛рдУрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
var users = _client.Query<CrmUser>() .CrmJoin(_client.Query<CrmUser>(), s => s.Chief.Id, d => d.Id, (s, d) => new { s.Id, s.Name, ChiefId = d.Id, ChiefFullName = d.Name }) .ToList(); or var users = _client.Query<CrmUser>() .CrmLeftJoin(_client.Query<CrmUser>(), s => s.Chief.Id, d => d.Id, (s, d) => new { s.Id, s.Name, ChiefId = d.Id, ChiefFullName = d.Name }) .ToList();
рдЕрдиреБрд░реЛрдз рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдХрд░реАрдм рд╕реЗ рджреЗрдЦреЗрдВ, рддреЛ s.Chief рдХреА Id рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдХрд╣реАрдВ рднреА рдореИрдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ EntityReference рдХреНрд▓рд╛рд╕ рдХреА рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реИ ... рд▓реЗрдХрд┐рди s.Cief рдкреНрд░реЙрдкрд░реНрдЯреА рдХреА рдореИрдкрд┐рдВрдЧ 'Parentsystemuserid' 'CRM' рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ ... рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ CRM рдЕрдиреБрд░реЛрдз рдореЗрдВ рдкреЗрд░реЗрдВрдЯреНрд╕рд╕рд┐рд╕реНрдЯрдорд╕рд╛рдЗрдб рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред 's.Chief рд╕реЗ, рдФрд░ рдиреЛрдЯреЗрд╢рди s => s.Chief.Id, d => d.Id рдХреЛ рдЯрд╛рдЗрдк рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдПрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд░реНрддреЛрдВ рдХрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╣реИред рдПрдХ CRM рдЕрдиреБрд░реЛрдз рдореЗрдВ, рдпрд╣ рд╕реНрдерд┐рддрд┐ рд▓рд┐рдВрдХ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╣реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рд▓реЙрдЧ рдЗрди рдЕрдиреБрд░реЛрдз рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
var users = _client.Query<CrmUser>() .CrmJoin(_client.Query<CrmUser>().CrmWhere(u => u.Id == _directorUserId), s => s.Chief.Id, d => d.Id, (s, d) => new { s.Id, s.Name, ChiefId = d.Id, ChiefFullName = d.Name }) .ToList(); or var users = _client.Query<CrmUser>() .CrmLeftJoin(_client.Query<CrmUser>().CrmWhere(u => u.Id == _directorUserId), s => s.Chief.Id, d => d.Id, (s, d) => new { s.Id, s.Name, ChiefId = d.Id, ChiefFullName = d.Name }) .ToList();
_client.Query () (CrmWhere (u => u.Id == _directorUserId) - рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреА рд╢рд░реНрдд рд╣реИред рдпрд╛рдиреА рдпрджрд┐ рдпрд╣ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ id_directorUserId рд╡рд╛рд▓реЗ рдирд┐рд░реНрджреЗрд╢рдХ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдВрдЧреЗред рдпрд╣рд╛рдВ рдЖрдк рдЕрдиреНрдп рд╢рд░реНрддреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдСрд░реНрдбрд░, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреЗрд╡рд▓ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред
NOLOCK
рдЗрд╕ рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ CRM рдкрдХреНрд╖ рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ (nolock) рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдкрд┐рдЫрд▓реЗ рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
var users = _client.Query<CrmUser>() .CrmNoLock() .ToList();
рдкреЗрдЬрд┐рдВрдЧ
CRM рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдкреГрд╖реНрда рдкрд░ рдЕрдВрдХ рд▓рдЧрд╛рдирд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИред рдкреГрд╖реНрда рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ
List<T> CrmGetPage(int pageNumber, int pageSize, out int totalCount, out bool moreRecordsExists)
рдпрд╣ рддреБрд░рдВрдд рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдХреЙрд▓ рддреБрд░рдВрдд CRM рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИред
рдпрд╣ рд╡рд┐рдзрд┐ рд░рд┐рдХреЙрд░реНрдб рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛, рдФрд░ рдПрдХ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдЕрднреА рднреА CRM рдкрдХреНрд╖ рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
int total; bool moreExists; var users = _client.Query<CrmUser>().CrmGetPage(1, 10, out total, out moreExists);
(рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ)рдЧреНрд░рд╛рд╣рдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗрд╡рд▓ рдореИрдкрд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдбреЗрдЯрд╛ рдореЗрдореЛрд░реА рдореЗрдВ рдХреИрд╢реНрдб рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдкрд╣рд▓рд╛ рдЕрдиреБрд░реЛрдз рдзреАрдорд╛ рд╣реЛрдЧрд╛ ...
рдХреНрд▓рд╛рд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдордп рдХреЗрд╡рд▓ CRM рдкрдХреНрд╖ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рджреЗрд░реА рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЯрд╛рдЗрдк рдХреНрд░рд┐рдПрд╢рди рдХреЛрдб рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рдЕрд╕реЗрдВрдмрд▓реА рдкреНрд░рддрд┐ рдкреНрд░рдХрд╛рд░ред рд▓реЗрдХрд┐рди рдПрдХ рдЧреБрд╣рд┐рдХрд╛рдпрди рд╣реИ:
рдЕрдирд╛рдо рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдореЗрдВ рдЧреБрдордирд╛рдо рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЖрдВрддрд░рд┐рдХ рдкреНрд░рдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдЕрд╕рдВрднрд╡ рд╣реИ ред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдХреИрд╕реЗ рдкрд╛рд░ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рд▓рд┐рдЦреЗрдВ, рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджреВрдВрдЧрд╛ред
рдПрд╕рдбреАрдХреЗ рд╕реЗ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛
рдЧрддрд┐ рдореЗрдВ, рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рдПрд╕рдбреАрдХреЗ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВ (рдЕрдВрддрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдиреЗрдЯрд╡рд░реНрдХ рджреЗрд░реА рдХреЗ рднреАрддрд░ рд╣реИ)ред рдкрд░реАрдХреНрд╖рдг CRM рдкрд░ рдбреЗрдЯрд╛ рдХреА рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЗ рдХрд╛рд░рдг, рдореБрдЭреЗ рдЕрднреА рддрдХ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рд╣реИ рдХрд┐ SDK рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ CRM рдкрдХреНрд╖ рдкрд░ рд╕рдм рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд╡реЗрджрди рдкрдХреНрд╖ рдкрд░ рдХреБрдЫ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЙрд░реНрдЯрд┐рдВрдЧ ...), рдореИрдВ рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдорд╛рдирдХ IQueryable рдФрд░ рдорд╛рдирдХ Linq рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпрд╛рдБред
рддреБрд▓рдирд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг рд╕реНрд╡рдпрдВ рд╕реНрд░реЛрдд рдореЗрдВ рд╣реИред рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИрдВ:
Operation ThisCrmClient SdkCrmClient Query 00:00:25.6005598 00:01:01.1291123 Select 00:00:03.5173517 00:00:03.6273627 Order 00:00:08.2558255 00:00:08.2338233 Where 00:00:04.1074107 00:00:03.9203920 WhereIn 00:00:05.3745374 not supported %Like% 00:00:03.3983398 00:00:03.4093409 %Like 00:00:03.4403440 00:00:03.4163416 Like% 00:00:03.3093309 00:00:03.3033303 Join 00:00:03.4313431 00:00:03.4143414 JoinFilter 00:00:03.3833383 not supported NoLock 00:00:09.6899689 not supported Distinct 00:00:07.9847984 00:00:08.0328032
рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ
рдЖрдк рдЕрд╕реЗрдВрдмрд▓реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реЛрд░реНрд╕ рдХреЛрдбреЗрдХреНрд╕рдПрдХреНрд╕ -
рдПрдордПрд╕рдХреНрд░реИрдореНрд▓рд┐рдПрдВрдЯ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдорд╛рдзрд╛рди рдореЗрдВ 3 рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- MsCrmClient - рдЧреНрд░рд╛рд╣рдХ рдЦреБрдж
- MsCrmClientTest - рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг
- PerfomanceTest - рдПрд╕рдбреАрдХреЗ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди
рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп
рдореИрдВрдиреЗ рдХреЛрдбрдкреНрд▓реЗрдХреНрд╕ рдкрд░ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рд▓рд┐рдЦрд╛ рдерд╛, рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рд░реВрд╕реА рд╕рдВрд╕реНрдХрд░рдг рдпрд╣ рд▓реЗрдЦ рд╣реИред
рд╕рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЬреЛ рдореБрдЭреЗ рдЗрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдорд┐рд▓реЗрдЧреА, рдореИрдВ рддреБрд░рдВрдд рд╕рд╣реА рдХрд░ рджреВрдВрдЧрд╛ рдФрд░ рдХреЛрдбрдкреНрд▓реЗрдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдЕрдкрд▓реЛрдб рдХрд░ рджреВрдВрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рддреНрд░реБрдЯрд┐ рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреГрд╖реНрда рдкрд░ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдмрдирд╛рдПрдБред рдореИрдВрдиреЗ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЕрдк рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ (рдпрд╣ рдореЗрд░реЗ рд╣рд┐рддреЛрдВ рдореЗрдВ рд╣реИ, рдпрджрд┐ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдореИрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рднреА рдЗрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)ред