NHibernate 2个FK以一对一的关系连接到同一PK
我在信封和交易之间有一对一的关系。我使用主键关联将其映射如下:NHibernate 2个FK以一对一的关系连接到同一PK,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我在信封和交易之间有一对一的关系。我使用主键关联将其映射如下: 根据您的要求,您可以: 编写一个存储过程来执行insert,并将NHibernate配置为在映射中使用此过程。在处理未使用但必须填充的遗留DBs和历史字段时,我采用了这种方法 使用一个。以下几点应该行得通。不过还没测试过 public class TransactionEntityInterceptor : EmptyInterceptor { public override boolean OnSave(object e
根据您的要求,您可以:
public class TransactionEntityInterceptor : EmptyInterceptor
{
public override boolean OnSave(object entity,
object id,
object[] state,
string[] propertyNames,
IType[] types)
{
if (entity is Transaction)
{
Object TransactionID;
for ( int i=0; i<propertyNames.Length; i++ )
{
if ( "TransactionID" == propertyNames[i] )
{
TransactionID = state[i];
return true
}
}
for ( int i=0; i<propertyNames.Length; i++ )
{
if ( "OLD_DEPRECATED_TXN_ID" == propertyNames[i] )
{
state[i] = TransactionID;
return true;
}
}
return false;
}
else
{
return true;
}
}
}
公共类TransactionEntityInterceptor:EmptyInterceptor
{
公共覆盖布尔OnSave(对象实体,
对象id,
对象[]状态,
字符串[]属性名称,
IType[]类型)
{
if(实体为交易)
{
对象事务ID;
对于(int i=0;i您的问题不太清楚..您能制作两个表-Transaction和Envelope,并在它们下面显示它们的列,然后告诉我们它们之间的预期关联吗?很抱歉,我的问题不清楚。实际上这是一个非常简单的设置:您有一个表,其中两个外键指向同一个表的主键另一张桌子。我希望我的例子能更好地解释问题。谢谢。我希望有一种更“自动”的方式。谢谢。
T_ENVELOPE
----------
ENVELOPE_ID
1
9
121
T_TRANSACTION
-------------
TRANSACTION_ID | OLD_DEPRECATED_TXN_ID
1|1
9|9
121|121
public class TransactionEntityInterceptor : EmptyInterceptor
{
public override boolean OnSave(object entity,
object id,
object[] state,
string[] propertyNames,
IType[] types)
{
if (entity is Transaction)
{
Object TransactionID;
for ( int i=0; i<propertyNames.Length; i++ )
{
if ( "TransactionID" == propertyNames[i] )
{
TransactionID = state[i];
return true
}
}
for ( int i=0; i<propertyNames.Length; i++ )
{
if ( "OLD_DEPRECATED_TXN_ID" == propertyNames[i] )
{
state[i] = TransactionID;
return true;
}
}
return false;
}
else
{
return true;
}
}
}