首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用实体框架更新CRM中的实体记录

使用实体框架更新CRM中的实体记录
EN

Stack Overflow用户
提问于 2015-11-22 08:42:46
回答 1查看 1.2K关注 0票数 0

最近,我试图使用CRM CrmSvcUtil.exe的SDK工具中的自动生成代码更新CRM 2015实体中的记录。

代码语言:javascript
复制
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()创建新记录

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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相关的任何错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33853026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档