我在 xrm.saveChanges()上遇到错误如果我 UpdateObject ,而 AddObject 工作正常,我认为这是因为这个线程中讨论的上下文Dynamics CRM saving Entity Changes - Getting Errors 但我尝试了这里讨论的所有选项https://msdn.microsoft.com/en-us/library/gg695783.aspx,但没有任何帮助。
我的代码是`
using (var xrm = new XrmServiceContext("Xrm"))
{
WriteExampleContacts(xrm);
//Create a new contact called Allison Brown.
var allisonBrown = new Xrm.Contact
{
FirstName = "Allison",
LastName = "Brown",
Address1_Line1 = "23 Market St.",
Address1_City = "Sammamish",
Address1_StateOrProvince = "MT",
Address1_PostalCode = "99999",
Telephone1 = "12345678",
EMailAddress1 = "allison.brown@example.com"
};
xrm.AddObject(allisonBrown);
xrm.SaveChanges();
WriteExampleContacts(xrm);
//Update the e-mail address of Allison Brown and link her to the account Contoso.
//allisonBrown.contact_customer_accountsParentCustomerAccount = account;
using (var xrm2 = new XrmServiceContext("Xrm"))
{
xrm.Detach(allisonBrown);
xrm2.Attach(allisonBrown);
allisonBrown.EMailAddress1 = "allison.brown@contoso.com";
xrm2.UpdateObject(allisonBrown);
xrm2.SaveChanges();
}
//Update the contact record and then commit the changes to Microsoft Dynamics CRM.
}
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
/// <summary>
/// Use all contacts where the email address ends in @example.com.
/// </summary>
private static void WriteExampleContacts(XrmServiceContext xrm)
{
var exampleContacts = xrm.ContactSet
.Where(c => c.EMailAddress1.EndsWith("@example.com"));
//Write the example contacts.
foreach (var contact in exampleContacts)
{
Console.WriteLine(contact.FullName);
}
}
我得到的错误是
> Microsoft.Xrm.Sdk.SaveChangesException was unhandled
HResult=-2146233088
Message=An error occured while processing this request.
Source=Microsoft.Xrm.Sdk
StackTrace:
at Microsoft.Xrm.Sdk.Client.OrganizationServiceContext.SaveChanges(SaveChangesOptions options)
at Microsoft.Xrm.Sdk.Client.OrganizationServiceContext.SaveChanges()
at MuslimAidConsoleApplication.Sample.Main(String[] args) at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException: System.ServiceModel.FaultException
HResult=-2146233087
Message=The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://schemas.microsoft.com/xrm/2011/Contracts/Services:request. The InnerException message was 'Error in line 1 position 12522. Element 'http://schemas.datacontract.org/2004/07/System.Collections.Generic:value' contains data from a type that maps to the name 'http://schemas.microsoft.com/xrm/7.1/Contracts:ConcurrencyBehavior'. The deserializer has no knowledge of any type that maps to this name. Consider changing the implementation of the ResolveName method on your DataContractResolver to return a non-null value for name 'ConcurrencyBehavior' and namespace 'http://schemas.microsoft.com/xrm/7.1/Contracts'.'. Please see InnerException for more details.
Source=mscorlib
任何帮助将不胜感激
答案 0 :(得分:0)
答案 1 :(得分:0)
您必须通过调用
启用早期绑定实体_serviceProxy.EnableProxyTypes();
在OrganizationServiceProxy实例上。
var cred = new ClientCredentials();
cred.UserName.UserName = "your username";
cred.UserName.Password = "your password";
using (var _serviceProxy = new OrganizationServiceProxy(new Uri("https://[your organization service url here]"), null, cred, null))
{
_serviceProxy.EnableProxyTypes(); // Will throw error on save changes if not here
var context = new CrmServiceContext(_serviceProxy);
context.AddObject(new Opportunity() { Name = "My opportunity" });
context.SaveChanges();
}
答案 2 :(得分:0)
重新生成代理类型应解决问题。
此外,由于您在线,请确保您拥有最新版本的SDK(无需追捕它们,它们可以在NuGet上使用)。