在CRM中使用linq时,有时会报这个错误:
A proxy type with the name account has been defined by another assembly.
Current type: Account, MyAssembly, Version=1.0.0.4, Culture=neutral, PublicKeyToken=be9afbacb707a086,
Existing type: Account, CustomPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Parameter name: account”
网上一搜索,有人说解决很简单:
var connection = CrmConnection.Parse(connectionString);
connection.ProxyTypesAssembly = Assembly.GetExecutingAssembly();
再到项目里一看,发现就没有这个CrmConnection:
Uri orgServiceUri = new Uri(CRMServiceUrl + "/XRMServices/2011/Organization.svc");
ClientCredentials credentials = new ClientCredentials();
if (CRMAuthenticationType == "AD")
{
credentials.Windows.ClientCredential = new System.Net.NetworkCredential(CRMUserName, CRMUserPassword, CRMUserDomainName);
}
else if (CRMAuthenticationType == "ADFS")
{
credentials.UserName.UserName = CRMUserDomainName + "\\" + CRMUserName;
credentials.UserName.Password = CRMUserPassword;
}
OrganizationServiceProxy crmServiceProxy = new OrganizationServiceProxy(orgServiceUri, null, credentials, null);
crmService = (IOrganizationService)crmServiceProxy;
原来是用的OrganizationServiceProxy,于是把它改成OrganizationService,因为OrganizationService里面会用到这个CrmConnection:
ClientCredentials credentials = new ClientCredentials();
if (CRMAuthenticationType == "AD")
{
credentials.Windows.ClientCredential = new System.Net.NetworkCredential(CRMUserName, CRMUserPassword, CRMUserDomainName);
}
else if (CRMAuthenticationType == "ADFS")
{
credentials.UserName.UserName = CRMUserDomainName + "\\" + CRMUserName;
credentials.UserName.Password = CRMUserPassword;
}
string server = string.Format("Url={0};Domain={1};Username={2};Password={2}", CRMServiceUrl, CRMUserDomainName, CRMUserName, CRMUserPassword);
var connection = CrmConnection.Parse(server);
connection.ProxyTypesAssembly = Assembly.GetExecutingAssembly();
connection.ClientCredentials = credentials;
m_CrmService = new OrganizationService(connection);
m_SvcContext = new ServiceContext(m_CrmService);
改完后,就不报这个错了。