Дан объект "MultipleKeysEntity" с двумя ключами keyA и keyB.
KeyA имеет тип Enumeration; KeyB имеет тип guid.
Сгенерированный код для метода Equals благодаря производителю спецификации не принимает во внимание keyA. Это нормальное поведение?
<cf:entity name="MultipleKeysEntity" defaultUsePersistenceDefaultValue="false" baseEqualsOverride="false" setType="List" namespace="Project.Namespace" >
<cf:property name="keyA" persistenceIdentity="false" key="true" typeName="{0}.Enumeration" />
<cf:property name="keyB" key="true" />
<cf:property name="property" typeName="decimal" /></cf:entity>
<cf:enumeration name="Enumeration" namespace="Project.Namespace" >
<cf:enumerationValue name="ONE" />
<cf:enumerationValue name="TWO" /></cf:enumeration>
Под сгенерированным кодом
public virtual bool Equals(Project.Namespace.MultipleKeysEntity multipleKeysEntity)
{
if ((multipleKeysEntity == null))
{
return false;
}
if ((this.keyB == CodeFluentPersistence.DefaultGuidValue))
{
return base.Equals(multipleKeysEntity);
}
return (this.keyB.Equals(multipleKeysEntity.keyB) == true);
}
Спасибо за Ваш ответ,
РЕДАКЦИЯ от 29.08.2016
После установки для атрибута checkDefaultValue значения true метод Equals использует свойство, как и ожидалось. Но первое значение перечислений считается "недопустимым" значением.
В частности, метод MultipleKeysEntityCollection::baseAdd() не позволяет мне использовать значение "ONE"
protected virtual int BaseAdd(WcfServices.Model.Association.MultipleKeysEntity multipleKeysEntity)
{
if ((multipleKeysEntity == null))
{
throw new System.ArgumentNullException("multipleKeysEntity");
}
if (((multipleKeysEntity.keyA == WcfServices.Model.Association.Enumeration.ONE)
|| (multipleKeysEntity.keyB.Equals(CodeFluentPersistence.DefaultGuidValue) == true)))
{
CodeFluent.Runtime.CodeFluentRuntimeException.Throw("invalidEntityKey", "keyA, keyB", "multipleKeysEntity", "WcfServices.Model.Association.MultipleKeysEntity");
}
int localAdd = this.BaseList.Count;
this.BaseList.Add(multipleKeysEntity);
this.OnCollectionChanged(new CodeFluent.Runtime.Utilities.IndexedCollectionChangeEventArgs(System.ComponentModel.CollectionChangeAction.Add, multipleKeysEntity, localAdd));
this.OnListChanged(new System.ComponentModel.ListChangedEventArgs(System.ComponentModel.ListChangedType.ItemAdded, localAdd));
return localAdd;
}
Код метода Equals приведен ниже:
public virtual bool Equals(WcfServices.Model.Association.MultipleKeysEntity multipleKeysEntity)
{
if ((multipleKeysEntity == null))
{
return false;
}
if (((this.keyA == WcfServices.Model.Association.Enumeration.ONE)
|| (this.keyB == CodeFluentPersistence.DefaultGuidValue)))
{
return base.Equals(multipleKeysEntity);
}
return ((this.keyA.Equals(multipleKeysEntity.keyA) && this.keyB.Equals(multipleKeysEntity.keyB))
== true);
}