CrmServiceContext无法使用CRM 2015 Online加载关系数据

dynamics-crm-2011 dynamics-crm dynamics-crm-2013 dynamics-crm-2015

228 观看

1回复

411 作者的声誉

我正在转换/升级应用程序以使用CRM 2015 Online而不是CRM2011。但是,它无法使用CRM 2015加载带有连接的关系数据。但是,它正在与CRM 2011一起使用。 CRM 2015 SDK。

检索订单的代码

var context = GetNewContext();

var ordersToProcess = (from o in context.SalesOrderSet
                       where o.SalesOrderId == orderId
                       select o).Distinct().ToList();

foreach (var salesOrder in ordersToProcess)
{
    // *** Error Here ***
    // *** CRM 2015 Code is throwing error here because transactioncurrency_salesorder is null ***
    var urrencyCode =
             salesOrder.transactioncurrency_salesorder.ISOCurrencyCode;
}

使用CRM 2011代码生成连接

public static CrmServiceContext GetNewContext(CrmConnection conn)
{
    var context = new CrmServiceContext(conn);
    return context;
}

使用CRM 2015在线代码生成连接

public static IOrganizationService GetNewService(CrmConnection conn)
{
    var service = new OrganizationService(conn);
    return service;
}

public static CrmServiceContext GetNewContext(CrmConnection conn)
{
    var context = new CrmServiceContext(GetNewService(conn));
    return context;
}
作者: user1211185 的来源 发布者: 2016 年 1 月 19 日

回应 (1)


1

5437 作者的声誉

决定

transactioncurrency_salesorder 是销售订单和货币之间的N:1关系。

如果您的上下文继承自OrganizationServiceContext(我认为您的2015代码就是这种情况),则默认情况下不会加载这些关系。您可以通过在访问关系之前调用LoadProperty来使它们延迟加载:

context.LoadProperty(salesOrder, "transactioncurrency_salesorder");

如果您的上下文继承自CrmOrganizationServiceContext(我假设您的2011代码是这种情况),则关系会自动延迟加载

另外,如果您不需要实际加载Currency本身(仅需要货币的名称或Guid),则可以使用EntityReference TransactionCurrencyId。始终设置,也无需调用LoadProperty。例如,您可以按如下方式获取货币名称:

salesOrder.TransactionCurrencyId.Name
作者: Henrik H 发布者: 20.01.2016 09:46
来自类别的问题 :
32x32