簡體   English   中英

Fluent Nhibernate 中的自定義參考映射

[英]Custom reference mapping in Fluent Nhibernate

在我的數據庫中,我有兩個表,一個在邏輯上引用另一個,但沒有定義外鍵(我無法控制數據庫,所以必須忍受它)。 例如:

Table1 (
    Table1Id int,
    Column1 int,
    Column2 int
)

Table2 (
    Table2Id int,
    Column1FromTable1 int,
    Column2FromTable1 int
)

假設保證(Column1, Column2)對對於Table1是唯一的。

在代碼中,我想為Table1定義HasMany映射,如下所示:

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,如何綁定數據庫中沒有綁定的代碼實體? 問題還在於我必須在這里使用的復雜鍵。

同樣,在這種情況下我無法更改數據庫,否則這將是我的自然選擇。

您將需要 map Col1 & 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" ) ;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM