Microsoft.Xrm.Sdk.EntityReference.Equals(obj)行为

时间:2018-01-25 16:46:13

标签: c# dynamics-crm

此方法用于比较对象的哪些字段? 我需要一个简单的方法来确定两个不同的EntityReference实例是否引用同一个实体。如果Equals()方法符合我的需要,我不想重新发明自行车。

MSDN只说Equals返回:

  

如果指定的EntityReference等于EntityReference,则为true   宾语;否则,错误。

2 个答案:

答案 0 :(得分:3)

部分实验表明,Equals方法比较'Id'和'LogicalName'字段并忽略'Name'。但是我们没有测试所有可能的情况(EntityReference中还有一些字段)。

答案 1 :(得分:2)

MSDN for EntityReference显示6个属性(字段),其中只有3个 - Id (主键GUID),名称(显示值/主要属性)和逻辑名称(实体名称)是可取的。

同样名称是可以为空的属性,例如:插件中的targetentity将其作为null,而preimage将带来DB的值。其他3 - RowVersion,KeyAttributes& ExtensionData是元数据。

EntityReference.Equals(Object)Object.Equals(Object)覆盖,其中包含:

  

来电者须知
  派生类经常重写Object.Equals(Object)方法以实现值相等。此外,类型还经常为Equals方法提供额外的强类型重载,通常是通过实现IEquatable接口。当您调用Equals方法来测试相等性时,您应该知道当前实例是否重写Object.Equals并了解如何解析对Equals方法的特定调用。否则,您可能正在执行与您的预期不同的相等性测试,并且该方法可能会返回意外值。

因此,被覆盖的Equals方法仅考虑 Id 来决定相同的实体“记录”,并选择 LogicalName 来决定{{3}时相同的实体“类型” }。