Что является внутренним исключением для «Не удалось скомпилировать документ сопоставления: (XmlDocument)»? Моя теория заключается в том, что «составной идентификатор класса должен переопределять Equals (): YOURNAMESPACE.PriorityListPart».
Для объектов, которым требуются составные идентификаторы, в качестве ключа используется сам объект. Чтобы объекты, которые «одинаковы», были распознаны как таковые, вам необходимо переопределить методы Equals и GetHashCode.
Пример метода Equals для вашей сущности будет выглядеть примерно так:
public override bool Equals(object obj)
{
var other = obj as PriorityListPart;
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return this.AssemblyPartNumber == other.AssemblyPartNumber &&
this.PartNumber == other.PartNumber;
}
Пример метода GetHashCode для вашей сущности будет выглядеть примерно так:
public override int GetHashCode()
{
unchecked
{
int hash = GetType().GetHashCode();
hash = (hash * 31) ^ AssemblyPartNumber.GetHashCode();
hash = (hash * 31) ^ PartNumber.GetHashCode();
return hash;
}
}
Это также означает, что если вы хотите получить объект, у вас не может быть ни одного ключа, чтобы сделать это. Чтобы правильно извлечь конкретный объект с его компонентами составного ключа, используемый вами ключ на самом деле является экземпляром объекта с компонентами составного ключа, установленного на объект, который вы хотите извлечь.
Именно поэтому метод Equals () должен быть переопределен, чтобы NHibernate мог определять, какой объект вы на самом деле пытаетесь получить, основываясь на том, что вы указали в методе Equals.