Настраиваемое сопоставление ссылок в Fluent Nhibernate - PullRequest
0 голосов
/ 04 июля 2011

В моей базе данных у меня есть две таблицы, одна логически ссылается на другую, но без определения внешнего ключа (я не могу управлять базой данных, поэтому приходится с этим мириться).Например:

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, как связать объекты кода, которые не связаны в базе данных?Проблема также в сложном ключе, который я должен использовать здесь.

Опять же, я не могу изменить базу данных в этом случае, что в противном случае было бы моим естественным выбором.

1 Ответ

1 голос
/ 04 июля 2011

Вам необходимо сопоставить 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" ) ;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...