CrmServiceContext 未加载与 CRM 2015 Online 的关系数据
CrmServiceContext not loading relationship data with CRM 2015 Online
我正在 convert/upgrade 申请使用 CRM 2015 Online 而不是 CRM 2011。但是它无法通过使用 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;
}
transactioncurrency_salesorder
是销售订单和货币之间的 N:1 关系。
如果您的上下文继承自 OrganizationServiceContext
(我假设您的 2015 代码就是这种情况),默认情况下不会加载这些关系。您可以通过在访问关系之前调用 LoadProperty 来延迟加载它们:
context.LoadProperty(salesOrder, "transactioncurrency_salesorder");
如果您的上下文继承自 CrmOrganizationServiceContext
(我假设您的 2011 代码就是这种情况),relationships are automatically lazy loaded。
或者,如果您不需要实际加载货币本身(并且只需要货币的名称或 Guid),您可以使用 EntityReference TransactionCurrencyId
。这总是设置的,也不调用 LoadProperty
。你可以例如获取货币的名称如下:
salesOrder.TransactionCurrencyId.Name
我正在 convert/upgrade 申请使用 CRM 2015 Online 而不是 CRM 2011。但是它无法通过使用 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;
}
transactioncurrency_salesorder
是销售订单和货币之间的 N:1 关系。
如果您的上下文继承自 OrganizationServiceContext
(我假设您的 2015 代码就是这种情况),默认情况下不会加载这些关系。您可以通过在访问关系之前调用 LoadProperty 来延迟加载它们:
context.LoadProperty(salesOrder, "transactioncurrency_salesorder");
如果您的上下文继承自 CrmOrganizationServiceContext
(我假设您的 2011 代码就是这种情况),relationships are automatically lazy loaded。
或者,如果您不需要实际加载货币本身(并且只需要货币的名称或 Guid),您可以使用 EntityReference TransactionCurrencyId
。这总是设置的,也不调用 LoadProperty
。你可以例如获取货币的名称如下:
salesOrder.TransactionCurrencyId.Name