首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ CRM 2011更新-创建

LINQ CRM 2011更新-创建
EN

Stack Overflow用户
提问于 2011-05-27 04:49:33
回答 2查看 3.1K关注 0票数 1

我注意到technet论坛上的客户关系管理版主大卫·詹纳韦指出,您不能使用LINQ在客户关系管理2011中更新/创建记录请参阅此处http://social.microsoft.com/Forums/en-IE/crmdevelopment/thread/682a7be2-1c07-497e-8f58-cea55c298062

但我看到了一些线程,让它看起来像是应该工作。这是我的尝试,但不起作用。有没有什么好主意?

代码语言:javascript
复制
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
OrganizationServiceContext orgContext = new OrganizationServiceContext(service);

EntityState state = new EntityState();
state = EntityState.Changed;

var counter = from c in orgContext.CreateQuery<pcx_entitycounter>()
        where c.pcx_name.Contains("pcx_candidate")
        select new pcx_entitycounter
        {Id = c.Id,
        pcx_name = c.pcx_name, pcx_Sequence = c.pcx_Sequence, pcx_Prefix = c.pcx_Prefix

        };

foreach (var c in counter)
        {
            string prefix = c.pcx_Prefix.ToString(); ;
            string sequence = c.pcx_Sequence.ToString();

            c.pcx_Sequence = c.pcx_Sequence + 1;
            c.EntityState = state;
            **service.Update(c);**  //FAILS HERE

        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-24 22:01:57

在我的经验中,从上下文中检索实体,更新它,然后使用服务保存更改是困难的,甚至是不可能的。弄清楚这个问题让我很头疼!

由于您的检索代码使用来自上下文的查询,因此所有这些实体都应该附加到上下文中,并跟踪它们的状态。因此,您需要使用上下文的方法进行更新:

代码语言:javascript
复制
foreach (var c in counter) {
    string prefix = c.pcx_Prefix.ToString(); ;
    string sequence = c.pcx_Sequence.ToString();

    c.pcx_Sequence = c.pcx_Sequence + 1;

    // Use the Context to save changes
    orgContext.UpdateObject(c);
    orgContext.SaveChanges();
}

由于我的许多代码将根据情况以不同的方式(即服务或上下文)检索实体,因此我开发了一个简单的方法,它知道如何正确地更新实体。为了扩展您的示例,您可能有一个更新方法,如下所示:

代码语言:javascript
复制
public void UpdatePcxEntityCounter(pcx_entitycounter c) {
    if (!orgContext.IsAttached(c)) {
        service.Update(c);
    }
    else {
        orgContext.UpdateObject(c);
        orgContext.SaveChanges();
    }
}

这假设orgContextservice在该方法的作用域之上都可用。否则,它们将不得不作为附加参数传递。

票数 2
EN

Stack Overflow用户

发布于 2011-06-06 00:21:08

没有看到困难,很难辨别出问题是什么,但在执行更新步骤之前,您是否尝试过使用orgContext.UpdateObject(c);?此外,不确定为什么要将前缀和序列分配给循环中的局部变量,因为它们似乎没有被使用。你可能会得到一个SOAP异常或者一些赋值不起作用的东西。你有没有在实体上注册的插件?

有关可能的解决方案,请参阅以下链接-

How to update a CRM 2011 Entity using LINQ in a Plugin?

http://social.microsoft.com/Forums/en-US/crmdevelopment/thread/7ae89b3b-6eca-4876-9513-042739fa432a

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

https://stackoverflow.com/questions/6144885

复制
相关文章

相似问题

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