【问题标题】:Getting error on SaveChanges while UpdateObject with early bound entities CRM SDK 2015在具有早期绑定实体 CRM SDK 2015 的 UpdateObject 时出现 SaveChanges 错误
【发布时间】:2015-09-18 00:29:56
【问题描述】:

我在 xrm.saveChanges() 上遇到错误如果我在 AddObject 工作正常时执行 UpdateObject,最初我认为这是因为本线程中讨论的上下文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

任何帮助将不胜感激

【问题讨论】:

  • 你为什么要创建另一个上下文?
  • 我遇到了完全相同的问题,并在我更新到 CRM SDK 2015 时开始发生我找到了这个链接,但我仍然无法让它工作social.microsoft.com/Forums/en-US/…
  • 你有什么收获吗?同样的问题!你介意分享你的结果吗?

标签: c# dynamics-crm dynamics-crm-online dynamics-crm-2015


【解决方案1】:

尝试使用这个版本... 它对我有用...

SDK 版本 7.0.a 2014 年 10 月

http://www.filedropper.com/microsoftdynamicscrm2015sdk

【讨论】:

    【解决方案2】:

    你必须通过调用来启用早期绑定实体

    _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();
    }
    

    【讨论】:

      【解决方案3】:

      重新生成代理类型应该可以解决问题。

      此外,由于您在线,请确保您拥有最新版本的 SDK(无需寻找它们,它们在 NuGet 上可用)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-19
        • 2023-04-07
        • 2020-11-29
        • 1970-01-01
        相关资源
        最近更新 更多