1

我正在尝试在 Firebird 和 MSSQL DB 之间进行通用 DataTransfer。两个业务库都包含“相同”的类,其中包含具有相同名称的属性。

我的问题是,当我有一个带有复合键的映射时,我不知道有多少或哪些属性构建了 id。

因此,使用单个 ID 很容易,它始终是我的映射文件中的第一个属性。

但是,如果我有一个复合 ID 怎么办?我必须确定构建密钥的属性。

我认为这可以通过 de hbm.xml 文件完成,但我不确定这是否可行。

我如何确定哪些属性在运行时构建密钥?

4

1 回答 1

2

使用配置,您可以向每个类询问其标识属性

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 回答