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

C# Microsoft.Xrm.Sdk.EntityReference.Equals(obj)行为,c#,dynamics-crm,C#,Dynamics Crm,此方法使用哪些字段来比较对象? 我需要一个简单的方法来确定EntityReference的两个不同实例是否引用同一个实体。如果Equals()方法适合我的需要,我不想重新发明自行车 MSDN仅表示等于回报: 如果指定的EntityReference等于EntityReference,则为true 对象否则,错误 部分实验表明,Equals方法比较'Id'和'LogicalName'字段,忽略'Name'。但我们没有测试所有可能的情况(EntityReference中还有一些字段) 显示6个属性(

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

MSDN仅表示等于回报:

如果指定的EntityReference等于EntityReference,则为true 对象否则,错误


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

显示6个属性(字段),其中只需要3个-Id(主键GUID)、名称(显示值/主属性)和逻辑名称(实体名称)

另外,Name是可为null的属性,例如:插件中的targetentity将使其为null,而preimage将使其值来自DB。其他3行版本、KeyAttributes和ExtensionData是元数据

被覆盖,其中表示:

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


因此,重写等值方法只考虑<强> id <强>来决定同一个实体“记录”,并且<强> LogiNeX何时确定同一个实体“类型”。

是否应该使用ID2为ReF2?不。没有错误,抱歉,我忘了删除ID2。我们打算在第二个测试用例中使用相同的ID,但不同的逻辑名称。应该有第三个测试用例,但很明显,不同的ID会导致来自Equals(…)的“false”输出