您现在可以使用替代键来创建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 集合。
消息的替代输入
当将实体传递给 CreateRequest 和 UpdateRequest时,使用 EntityReference 为查找属性提供的值现在可以使用 EntityReference 和 KeyAttributes 中定义的备用键来指定相关记录。 在处理消息之前,这些将被解析并被替换为基于主 ID 的实体引用。
使用替代键时出现的异常情况
使用备用键时,您必须了解以下条件和可能的异常:
如果提供了主 ID,则使用主 ID。 如果未提供,将会检查 KeyAttributeCollection。 如果未提供KeyAttributeCollection,它将引发错误。
如果提供的 KeyAttributeCollection 中包含一个属性,该属性是实体的主键并且该值有效,则会用提供的值填充 Entity 或 EntityReference 的 ID 属性。
如果提供了关键属性,系统会尝试将提供的属性集与为Entity定义的键进行匹配。 如果找不到匹配项,它将引发错误。 如果找到匹配项,它将验证为这些属性提供的值。 如果有效,它将检索与提供的键值匹配的记录的 ID,并使用此值填充 or Entity 的 EntityReference ID 值。
如果指定的属性集未定义为唯一键,则会引发错误,指示需要使用唯一键属性。