Ключевым моментом является то, что 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