1

Habanero Smooth を使用して、ClassDefs で定義されているクラスに 2 つの関係をマップしようとしています。

ハバネロスムーズクラス:

    [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 : 関連クラス 'Determinand' に対して定義された逆の関係 'TestRules' とクラス 'LIMS.BO.TestRule' に対して定義された関係 'RelatedDeterminand' があるため、関係 'RelatedDeterminand' をロードできませんでした。関係キーとして定義された同じプロパティを持たない - RelatedDeterminandID に一致する RelProp が見つかりません -> DeterminandID 関係 RelatedDeterminandRelProp 1 reverseRelationshipName, IRelationshipDef reverseRelationshipDef,Habanero.BO.ClassDefinition.ClassDefValidator.ValidateReverseRelationship(IClassDef classDef, IRelationshipDef relationshipDef, IClassDef relatedClassDef) の Habanero.BO.ClassDefValidator.CheckRelationshipsForAClassDef(IDictionary`2 loadedFullPropertyLists, IClassDef classDef, ClassDefCol classDefs) の Habanero.BO. ClassDefinition.ClassDefValidator.CheckRelationships(ClassDefCol classDefs) at Habanero.BO.ClassDefinition.ClassDefValidator.ValidateClassDefs(ClassDefCol classDefCol) at LIMS.Test.BO.TestClassDefValid.Test_ValidateClassDefs() in TestClassDefValid.cs: 37 行目Habanero.BO.ClassDefinition.ClassDefValidator.CheckRelationships(ClassDefCol classDefs) の CheckRelationshipsForAClassDef(IDictionary`2 loadedFullPropertyLists, IClassDef classDef, ClassDefCol classDefs) TestClassDefValid.cs の Test_ValidateClassDefs(): 37 行目Habanero.BO.ClassDefinition.ClassDefValidator.CheckRelationships(ClassDefCol classDefs) の CheckRelationshipsForAClassDef(IDictionary`2 loadedFullPropertyLists, IClassDef classDef, ClassDefCol classDefs) TestClassDefValid.cs の Test_ValidateClassDefs(): 37 行目

4

1 に答える 1

0

OK 基本的な問題は、automap 関係を間違った方法で定義したことです。

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

する必要があります

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

RelatedDeterminand などの単一の関係は、常に OneToOne または ManyToOne のいずれかになります。

ただし、エラー メッセージの方がはるかに役立つ場合があります。

このような場合、より意味のあるエラーを作成するには、http://redmine.habanerowiki.com/projects/show/habanerosmoothに問題を記録してください。

于 2011-06-07T14:36:59.943 に答える