Habanero中的关系

| 我一直在尝试编写一些通用代码来创建Habanero业务对象的xml包。该代码当前可以处理组合关系,但是我需要手动添加关联关系。有没有办法以更通用的方式添加不具有复合反向关系的关联关系。 这就是添加构图关系的方式
    private static void AddRelatedCompositionObjects(Package package, IBusinessObject businessObject)
    {
        businessObject.Relationships
            .Where(rel => rel.RelationshipType == RelationshipType.Composition)
            .Where(rel => rel is IMultipleRelationship)
            .Select(rel => (IMultipleRelationship)rel)
            .ForEach(rel => rel.BusinessObjectCollection
                                .AsEnumerable<IBusinessObject>()
                                //.ForEach(package.Add));
                                .ForEach(bo => BuildPackage(package, bo)));

        businessObject.Relationships
            .Where(rel => rel.RelationshipType == RelationshipType.Composition)
            .Where(rel => rel is ISingleRelationship)
            .Select(rel => (ISingleRelationship)rel)
            //.ForEach(rel => package.Add(rel.GetRelatedObject()));
            .ForEach(rel => BuildPackage(package, rel.GetRelatedObject()));
    }
然后我手动添加关联关系
                var package = new Package();
                foreach (var returnDelivery in returnDeliveries)
                {
                    package.Add(returnDelivery);
                    if (returnDelivery != null)
                    {
                        var materials = returnDelivery.DeliveryItems.Select(item => item.Material).Distinct();
                        materials.ToList().ForEach(material =>
                        {
                            package.Add(material);
                            material.EWTMaterials.ForEach(package.Add);
                        });
                        package.Add(returnDelivery.Customer);
                    }
                }
    
已邀请:
        首先要意识到的是 1)Habanero不需要您定义反向关系。尽管如果您是从Firestarter生成类定义的,则将只有一个。 我从Habanero.BO的ClassDefValidator中窃取了此示例代码段,因此它可能并不是您想要的,并且肯定可以推广到该体系结构中。 这段代码被截断了,是为一个RelationshipDef获取了反向的RelationshipDef 该代码在Habanero.BO.ClassDefValidator中 如果您在此处查看CheckRelationshipsForAClassDef方法,将看到获取相关ClassDef的代码。将其转换为您所需的东西应该很容易。 如果您有任何问题,请给我喊。
        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];
布雷特     

要回复问题请先登录注册