0

NHibernate でマッピングされたいくつかのリレーションを持つモデルがあり、サンプルとして正常に動作しています。

public class A
{
   public int Id { get; set; }
   // other properties

   public ICollection<B> BList { get; set; }
   public ICollection<C> CList { get; set; }
   public ICollection<D> DList { get; set; }
}

この種のエンティティの永続性と読み取りは非常にうまく機能しますが、ユーザーがエンティティを削除する場合、A関連するエンティティが 1 つ以上あることを示したいと思います (どのエンティティ (ID、名前など) ではなく、エンティティの種類)、サンプル:

You cannot delete this register because there are relations with:

-B
-D

(AエンティティBの場合、 またはDの関係があり、 の関係はありませんC)。

エンティティごとにこの情報を確認できることはわかっていますが、一般的な解決策が必要です。方法はありますか?!

4

1 に答える 1

1

NHibernate には独自のメタデータ API があり、どのコレクションがプロパティにマップされているか、プロパティの型は何かなど、すべてのマッピング情報を読み取ることができます。各プロパティのタイプから、関連するタイプの名前を見つけることができます。

A instance = ...
var metaData = this.session.SessionFactory.GetClassMetadata(instance.GetType());
foreach(IType propertyType in metaData.PropertyTypes)
{
  if(propertyType.IsCollectionType)
  {
    var name = propertyType.Name;
    var collectionType = (NHibernate.Type.CollectionType)propertyType;
    var collection = collectionType.GetElementsCollection(instance);
    bool hasAny = collection.Count > 0;
  }
}
于 2013-05-14T20:15:29.913 に答える