使用备用键创建记录

您现在可以使用替代键来创建Entity类和EntityReference类的实例。 本主题讨论使用模式和使用备用键时可能引发的异常。 要了解如何为实体定义备用键,请参阅 定义实体的备用键

使用备用键创建实体

现在,您可以使用新的构造函数通过单次调用创建具有主 ID 的 Entity 或创建单个 KeyAttribute

public Entity (string logicalName, Guid id) {…}    
public Entity (string logicalName, string keyName, object keyValue) {…}  
public Entity (string logicalName, KeyAttributeCollection keyAttributes) {…}  
  

用于更新操作的有效 Entity 包括实体的逻辑名称和以下项之一:

  • ID 值(主键 GUID 值)(或)

  • 具有一组与实体的已定义键匹配的有效属性的 KeyAttributeCollection

使用备用键创建 EntityReference

您还可以使用新构造函数创建没有主 ID 的 EntityReference,并在单次调用中创建一个单一的 KeyAttribute

public EntityReference(string logicalName, Guid id) {…}    
public EntityReference(string logicalName, string keyName, object keyValue) {…}    
public EntityReference(string logicalName, KeyAttributeCollection keyAttributeCollection) {…}  
  

一个有效的 EntityReference 必须包含实体的逻辑名称,以及以下任何一种内容:

  • ID 值(主键 GUID 值)或

  • 具有一组与实体的已定义键匹配的有效属性的 KeyAttributeCollection 集合。

消息的替代输入

当将实体传递给 CreateRequestUpdateRequest时,使用 EntityReference 为查找属性提供的值现在可以使用 EntityReferenceKeyAttributes 中定义的备用键来指定相关记录。 在处理消息之前,这些将被解析并被替换为基于主 ID 的实体引用。

使用替代键时出现的异常情况

使用备用键时,您必须了解以下条件和可能的异常:

  • 如果提供了主 ID,则使用主 ID。 如果未提供,将会检查 KeyAttributeCollection。 如果未提供KeyAttributeCollection,它将引发错误。

  • 如果提供的 KeyAttributeCollection 中包含一个属性,该属性是实体的主键并且该值有效,则会用提供的值填充 EntityEntityReference 的 ID 属性。

  • 如果提供了关键属性,系统会尝试将提供的属性集与为Entity定义的键进行匹配。 如果找不到匹配项,它将引发错误。 如果找到匹配项,它将验证为这些属性提供的值。 如果有效,它将检索与提供的键值匹配的记录的 ID,并使用此值填充 or EntityEntityReference ID 值。

  • 如果指定的属性集未定义为唯一键,则会引发错误,指示需要使用唯一键属性。

另请参阅

定义实体的备用键
使用数据更改跟踪将数据与外部系统同步
使用 Upsert 插入或更新记录