2

とにかく、コレクションがセッションからの多対多または多対1の関係であるかどうかをテストすることはできますか?

私は限り使用している

SessionFactory.GetClassMetadata(型)

これはPropertyTypesコレクションを提供しますが、これは多対多と多対1を区別しません.1対多は対応しています

4

1 に答える 1

1

TheEntity以下のコードは、マップされたコレクションを見つけるために、プロパティ名を繰り返します。次に、コレクションの永続化を要求し、1 対多または多対多について通知されます。

var persister = factory
    .GetClassMetadata(typeof(TheEntity)) as AbstractEntityPersister;

// iterate property names
foreach (var propertyName in persister.PropertyNames)
{
    // find type
    var index = persister.GetPropertyIndex(propertyName);
    var propertyType = persister.PropertyTypes[index];

    // check if it is collection
    if (!propertyType.IsCollectionType)
    {
        continue;
    }

    // the Role is
    // the Entity type Name & the Collection name
    var roleName = persister.Name + "." + propertyName;

    // the Abstract collection persister
    var collectionPersister = factory
        .GetCollectionMetadata(roleName) as AbstractCollectionPersister;

    // here we go:
    var isManyToMany = collectionPersister.IsManyToMany;
    var isOneToMany = collectionPersister.IsOneToMany;

}

注:あなたの質問では、多対一(コレクションマッピングではなく参照)はOne-to-Many

于 2013-09-15T16:24:19.560 に答える