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

Dynamics crm 使用实体框架更新CRM中的实体记录,dynamics-crm,crm,dynamics-crm-2015,Dynamics Crm,Crm,Dynamics Crm 2015,我最近一直在尝试使用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"

我最近一直在尝试使用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)应用程序抛出以下错误:

格式化程序在尝试反序列化消息时引发异常:尝试反序列化参数时出错。InnerException消息为“第1行位置13371中的错误”。元素“”包含来自映射到名称“”的类型的数据。反序列化程序不知道映射到此名称的任何类型。考虑在DATACONTracTeRever中更改DeavaNaveTracver的实现,以返回名称“CONCurrnyAcess”和命名空间''.'的非空值。有关更多详细信息,请参阅InnerException

还是这个

EntityState必须设置为null、已创建(用于创建消息)或已更改(用于更新消息)

当试图手动将实体状态设置为“已更改”时,我会遇到此错误

实体为只读,无法修改“EntityState”属性。改为使用上下文更新实体


知道我可以通过使用
ctx.AddObject()

使用相同的自动生成代码创建新记录,您应该在调用
ctx.SaveChanges()之前使用
ctx.UpdateObject

UpdateRequest.ConcurrencyBehavior
在CRM 2015更新1中引入。在我看来,您使用的CRM版本和CrmSvcUtil版本不匹配。您必须使用更新版本的SDK工具


由于您使用的是CRM的RTM版本,因此可以下载并使用相应的RTM版本。从该版本使用CrmSvcUtil重新生成上下文后,您将不再看到与
UpdateRequest.ConcurrencyBehavior

相关的任何错误,我正在使用内部部署的Microsoft Dynamics®CRM 2015(7.0.0.3543)(DB 7.0.0.3543),如果我使用update或updateObject,将触发异常,如问题OK所示。在这种情况下,您可以获得SDK工具的RTM版本。我已相应地更新了答案。