最近,我试图使用CRM CrmSvcUtil.exe的SDK工具中的自动生成代码更新CRM 2015实体中的记录。
CrmConnection con = new CrmConnection("CRM");
XrmServiceContext ctx = new XrmServiceContext(con);
var nn = ctx.TestEntity.Where(x => x.Name== "12132").FirstOrDefault();
nn.Name="test";
ctx.SaveChanges();但是在保存更改之后,所有所做的更改都会被忽略,我注意到更改记录的实体状态仍然不变。
当使用ctx.UpdateObject(nn);和ctx.Update(mm);时,应用程序引发以下错误:
格式化程序在试图反序列化消息时抛出一个异常:试图反序列化参数http://schemas.microsoft.com/xrm/2011/Contracts/Services:request时出错。InnerException消息是“第1行位置13371的错误”。元素“http://schemas.datacontract.org/2004/07/System.Collections.Generic:value”包含来自映射到名称“http://schemas.microsoft.com/xrm/7.1/Contracts:ConcurrencyBehavior”的类型的数据。反序列化器不知道映射到此名称的任何类型。考虑更改ResolveName方法在DataContractResolver上的实现,以返回名称'ConcurrencyBehavior‘和命名空间'http://schemas.microsoft.com/xrm/7.1/Contracts'.’的非空值。有关更多细节,请参见InnerException。
或者这个
必须将EntityState设置为空、创建(用于创建消息)或更改(用于更新消息)
当尝试手动将实体状态设置为“更改”时,我会得到以下错误
该实体是只读的,不能修改“EntityState”属性。使用上下文更新实体。
知道可以使用相同的自动生成代码使用ctx.AddObject()创建新记录
发布于 2015-11-22 10:34:45
您应该在调用ctx.UpdateObject之前使用ctx.SaveChanges()。
UpdateRequest.ConcurrencyBehavior是在客户关系管理2015更新1中引入的。在我看来,你的客户关系管理的版本和你正在使用的CrmSvcUtil的版本不匹配。您必须使用较新版本的SDK工具。
由于您使用的是RTM版本的CRM,您可以下载并使用相应的RTM版本的CRM 2015 SDK核心工具(7.0.1版)。在使用CrmSvcUtil从该版本重新生成上下文之后,您将不会再看到与UpdateRequest.ConcurrencyBehavior相关的任何错误。
https://stackoverflow.com/questions/33853026
复制相似问题