NHibernate, простой вопрос, дополнительная ассоциация - PullRequest
2 голосов
/ 26 апреля 2011

У меня есть этот вопрос, который беспокоит меня, и мой огромный и непостижимый интеллект просто не может его понять.Случай: я хочу создать несколько взаимосвязей «один ко многим» для одной и той же сущности, используя беглый автомат nhibernate и схему экспорта.

У меня есть:

Базовый класс:

 public abstract class Post<T> : Entity, IVotable, IHierarchy<T>
 {
    public virtual string Name
    {
        get; set;
    }

    public virtual string BodyText
    {
        get; set;
    }

    public virtual Member Author
    {
        get; set;
    }
}

и класс наследования:

 [Serializable]
public class WallPost : Post<WallPost>
{
    public virtual Member Receiver
    {
        get; set;
    }
}

Свойства "Участника" WallPost - это отношение внешнего ключа к этому классу:

public class Member : Entity
    {
        public Member()
        {
           WallPosts = new IList<WallPost>();
        }

 public virtual IList<WallPost> WallPosts
        {
            get; set;
        }
}

Я надеюсь, что вы со мной, покасейчас.Когда я запускаю exportchema nhibernate, я ожидаю получить настенный пост с «author_id» и «receive_id», НО я получаю author_id, receive_id, member_id.Почему фреймворк Nhibernate добавил member_id, если он предназначен для сбора записей (IList), то как указать, что отношение ключа foregin, которое он должен использовать для заполнения, - получатель, т.е. member.WallPosts вернет все настенные сообщения получателя.

Надеюсь, у меня есть смысл, если вам понадобится что-то еще, чтобы ответить на вопрос, дайте мне знать, и я постараюсь предоставить.

Заранее спасибо

Ps Если я изменюсьимя свойства от 'Receiver' до 'Member', т.е. общедоступного виртуального члена Member, вместо 3 создается только две ассоциации, author_id и member_id.

E

РЕШЕНИЕ ДЛЯ ЭТОГОВОПРОС ДЛЯ ЛЮБОГО ЧТО-ТО ЧТОБЫ ДОБАВИТЬ ПЕРЕЗАГРУЗИТЬ:

mapping.HasMany(x => x.WallPosts).KeyColumn("Receiver_id");

1 Ответ

3 голосов
/ 26 апреля 2011

Скорее всего (я не использую автоматическое сопоставление, я предпочитаю писать свои собственные карты классов), потому что автоматическое сопоставление предполагает, что "WallPosts" вашего Участника контролируется сообщениями на стене. Таким образом, он создает member_id для этих отношений.

Редактировать: попробуйте добавить переопределение в беглой конфигурации, после добавления AutoMap:

.Override<Member>(map =>
{
  map.HasMany(x => x.WallPosts, "receiver_id")
    .Inverse;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...