在我的数据库中,我有两个表,一个逻辑引用其他表,但没有定义外键(我无法控制数据库,所以必须使用它)。 E.g:
Table1 (
Table1Id int,
Column1 int,
Column2 int
)
Table2 (
Table2Id int,
Column1FromTable1 int,
Column2FromTable1 int
)
假设保证(Column1, Column2)
对Table1
是唯一的。
在代码中,我想为HasMany
定义Table1
映射,如下所示:
public class Table1
{
public int Id
{
get;
set;
}
public IEnumerable<Table2> Table2s
{
get;
set;
}
}
public class Table2
{
public int Id
{
}
public Table1 Table1
{
get;
set;
}
}
public class Table1Map : ClassMap<Table1>
{
public Table1Map()
{
Id(x => x.Id).Column("Table1Id");
HasMany(x => x.Table2s); //What next?
}
}
我该怎么做?我可以使用OneToManyPart
的哪些方法来定义引用?
简单来说,使用Fluent NHibernate,我如何绑定未绑定在数据库中的代码实体?问题也在于我必须在这里使用的复杂密钥。
同样,在这种情况下我无法更改数据库,否则这将是我的自然选择。
答案 0 :(得分:1)
您需要映射Col1
&amp; Col2
作为这样的复合键:
public class Table1Map : ClassMap<Table1>
{
public Table1Map()
{
UseCompositeId()
.WithKeyProperty( x => x.Column1 , "Column1" )
.WithKeyProperty( x => x.Column2 , "Column2" );
HasMany(x => x.Table2s)
.WithKeyColumn( "Column1FromTable1" )
.WithKeyColumn( "Column2FromTable1" ) ;
Map(x => x.Id).Column("Table1Id");
}
}
以及Table2
的映射:
public class Table2Map : ClassMap<Table2>
{
public Table2Map()
{
Id(x => x.Id).Column("Table2Id");
References(x => x.Table1)
.WithColumns( "Column1FromTable1", "Column2FromTable1" ) ;
}
}