Попытка использовать Habanero Smooth для создания двух связей с определенным классом XML - PullRequest
1 голос
/ 07 июня 2011

Я пытаюсь использовать Habanero Smooth для сопоставления двух отношений с классом, который определен в моих ClassDefs.

Habanero Smooth Class:

    [AutoMapCompulsory]
    [AutoMapOneToMany(ReverseRelationshipName = "TestRules")]
    public virtual Determinand Determinand
    {
        get { return Relationships.GetRelatedObject<Determinand>("Determinand"); }
        set { Relationships.SetRelatedObject("Determinand", value); }
    }

    [AutoMapOneToMany(ReverseRelationshipName = "RelatedTestRules")]
    public virtual Determinand RelatedDeterminand
    {
        get { return Relationships.GetRelatedObject<Determinand>("RelatedDeterminand"); }
        set { Relationships.SetRelatedObject("RelatedDeterminand", value); }
    }

Класс XML:

   <class name="Determinand" assembly="" table="tbdeterminand" displayName="Determinand">
          <property name="DeterminandID" type="Guid" readWriteRule="WriteNew" compulsory="true" />
   </class>

Проблема

Когда я выполняю свой тест, чтобы проверить, что мои ClassDefs сгенерированы правильно, он не дает мне следующую ошибку:

Тест

            [Test]
            public void Test_ValidateClassDefs()
            {
                //---------------Set up test pack-------------------
                ClassDef.ClassDefs.Add(BOBroker.GetClassDefs());
                //---------------Assert Precondition----------------
                ClassDef.ClassDefs.ShouldNotBeEmpty();
                //---------------Execute Test ----------------------
                var validator = new ClassDefValidator(new DefClassFactory());
                validator.ValidateClassDefs(ClassDef.ClassDefs);
            }

Ошибка

Habanero.Base.Exceptions.InvalidXmlDefinitionException: не удалось загрузить отношение RelatedDeterminand, поскольку обратное отношение TestRules определено для связанного класса «Determinand» и отношение «RelatedDeterminand» определено для класса «LIMS»..BO.TestRule 'не имеют те же свойства, что и ключи отношения - Не найдено соответствующего RelProp для RelatedDeterminandID -> DeterminandID Relationship RelatedDeterminandRelProp 1 RelatedDeterminandID - DeterminandID ReverseRelationship TestRulesRelProp 1 DeterminandID - Определить ID в Habanero.Bef.Class.Class.Classator.CheckReverseRelationshipRelKeyDefProps (IRelationshipDef relationshipDef, IClassDef relatedClassDef, String reverseRelationshipName, IRelationshipDef reverseRelationshipDef, IClassDef classDef) в Habanero.BO.ClassDefinition.ClassDefValidator.ValidateReverseRelationship (IClassDef classDef, IRelationshipDef relationshipDef, IClassDef relatedClassDef) в Habanero.BO.ClassDefinition.ClassDefValidator.CheckRelationshipsForAClassDef (IDictionary`2 loadedFullPropertyLists, IClassDef classDef, classDefCol classDefs) при Habanero.BO.ClassDefinition.ClassDefValidator.CheckRelationships (classDefCol classDefs) при Habanero.BO.ClassDefinition.ClassDefValidator.ValidateClassDefs (classDefCol classDefCol) в LIMS.Test.BO.TestClassDefValid.Test_ValidateClassDefs () в TestClassDefValid.cs: строка 37

1 Ответ

0 голосов
/ 07 июня 2011

ОК, фундаментальная проблема в том, что вы неправильно определили свои отношения с автоматом.

[AutoMapOneToMany(ReverseRelationshipName = "RelatedTestRules")]
public virtual Determinand RelatedDeterminand

Должно быть

[AutoMapManyToOne(ReverseRelationshipName = "RelatedTestRules")]
public virtual Determinand RelatedDeterminand

Отдельные отношения, например RelatedDeterminand всегда будет OneToOne или ManyToOne.

Однако сообщение об ошибке может быть гораздо более полезным.

Пожалуйста, зарегистрируйте проблему на http://redmine.habanerowiki.com/projects/show/habanerosmooth, чтобы сделать более значимую ошибку в этих случаях.

...