1

FirebirdとMSSQLDBの間で汎用のDataTransferを作成しようとしています。両方のBusiness-Libには、同じ名前のプロパティを含む「同じ」クラスが含まれています。

私の問題は、複合キーを使用したマッピングがある場合、IDを構築するプロパティの量やプロパティがわからないことです。

したがって、単一のIDを使用すると簡単で、マッピングファイルの最初のプロパティになります。

しかし、複合IDがある場合はどうなりますか?キーを構築するプロパティを特定する必要があります。

これはdehbm.xmlファイルで実行できると思いましたが、それが機能するかどうかはわかりません。

実行時にどのプロパティがキーを作成するかをどのように判断できますか?

4

1 に答える 1

2

構成を使用して、各クラスにそのIDプロパティを要求できます

foreach(var clazz in config.ClassMappings)
{
    var idProperties = clazz.IdentifierMapper.PropertyIterator
}

または、オブジェクトがすでに存在するかどうかのみを照会する場合(および、エンティティタイプは実行時にのみ認識される可能性があります)

var classMetadata = sessionfactory.GetClassMetadata(obj.GetType());
object id;
if (classMetadata.IdentifierType.IsComponentType)
    id = obj;
else
    id = classMetadata.GetIdentifier(obj, NHibernate.EntityMode.Poco);

fromDatabase = session.Get(classMetadata.EntityName, obj);
if (fromDatabase != null)
    // already exists
于 2012-08-30T19:24:32.587 に答える