Reverse.KeyColumn ([]) в Fluent NHibernate

Ключевым моментом является то, что KeyColumn находится в таблице BASE. Из следующего кода видно, что между пользователем и подпиской существует связь «один ко многим».

public class Activity 
{
    public virtual User Executor { get; set; }

    //probably I should set some kind of Polymorphism here?
}

public class Follow : Activity
{
    public virtual User Followee { get; set; }
}

public class User 
{
    public virtual IList<Follow> Follows { get; set; }
}

поэтому я сопоставил их следующим образом:

public class ActivityMap : EntityMap<Activity>
{
    public ActivityMap()
    {
        References<User>(m => m.Executor);
    }
}

public class FollowMap : SubclassMap<Follow>
{
    public FollowMap()
    {
        References(m => m.Followee);
    }
}

public class UserMap : EntityMap<User>
{
    public UserMap()
    {
        HasMany(m => m.Follows)
            .Inverse();
            //.KeyColumn("Executor_id");
    }
}

Обратите внимание на карту KeyColumn (). «Executor_id» находится не в таблице tb_Follow, а в таблице tb_Activity (для стратегии подкласса). Если код подобен приведенному выше, в tb_Follow будет сгенерирован новый столбец «Executor_id», который, я думаю, дублирован.

Как теперь обратиться к столбцу Executor_id в tb_Activity?

PS: структура таблицы.

tb_Follow
    +-------------+-------------+---------+
    + Activity_id + Followee_id + User_id +
    +-------------+-------------+---------+
    +      1      +      7      +  NULL   +
    +-------------+-------------+---------+

tb_Activity    
    +-------------+-------------+---------+
    +     id      + Executor_id +   Type  +
    +-------------+-------------+---------+
    +      1      +      6      +  Follow +
    +-------------+-------------+---------+

так что это User (6) - follow -> User (7)

User_id должен быть 6 в моем разрешении, то же самое (и я думаю, дублированный) с Executor_id


person freeflying    schedule 26.12.2013    source источник
comment
Это вызвано чем-то связанным с полиморфизмом?   -  person freeflying    schedule 26.12.2013
comment
Я бы сказал: если вы хотите, чтобы существовали оба свойства: Executor и Followee - тогда нужны 2 столбца. Зависит от того, где они размещены в Entities (C #) ... то же самое должно быть в их табличном представлении. Если вам нужен только один Пользователь ... опять же, нам просто нужно решить, на каком уровне ... Или мне что-то не хватает?   -  person Radim Köhler    schedule 26.12.2013
comment
да, и Executor, и Followee здесь. Но Executor находится в Activity базового типа. поэтому в приведенной выше таблице, как вы можете видеть, User_id дублируется с Executor_id   -  person freeflying    schedule 26.12.2013


Ответы (1)


Фактически, столбец User_id создается с помощью SchemaExport () в Fluent NHibernate. Я удалил его и сослался на KeyColumn ("Executor_id"), и он отлично работает.

Я думаю, что проблема вызвана SchemaExport () FluentNHibernate.

person freeflying    schedule 26.12.2013