Первое, что нужно понять, это то, что
1) Habanero не требует от вас определения обратных отношений. Хотя, если вы генерируете определения классов из Firestarter, у вас их будет.
Я украл этот образец фрагмента из ClassDefValidator в Habanero.BO, так что он может быть не совсем тем, что вы хотите, и, безусловно, может быть обобщен в архитектуру.
Этот фрагмент кода выполняет обратное отношение RelationshipDef для RelationshipDef
.
этот код находится в Habanero.BO.ClassDefValidator
Метод CheckRelationshipsForAClassDef. Если вы посмотрите здесь, вы увидите код для получения relatedClassDef. Преобразовать это в то, что вам нужно, должно быть довольно легко.
Если у вас есть какие-либо проблемы, тогда кричите.
if (!HasReverseRelationship(relationshipDef)) return;
string reverseRelationshipName = relationshipDef.ReverseRelationshipName;
if (!relatedClassDef.RelationshipDefCol.Contains(reverseRelationshipName))
{
throw new InvalidXmlDefinitionException
(string.Format
("The relationship '{0}' could not be loaded for because the reverse relationship '{1}' defined for class '{2}' is not defined as a relationship for class '{2}'. Please check your ClassDefs.xml or fix in Firestarter.",
relationshipDef.RelationshipName, reverseRelationshipName, relatedClassDef.ClassNameFull));
}
var reverseRelationshipDef = relatedClassDef.RelationshipDefCol[reverseRelationshipName];
Brett