У меня есть этот вопрос, который беспокоит меня, и мой огромный и непостижимый интеллект просто не может его понять.Случай: я хочу создать несколько взаимосвязей «один ко многим» для одной и той же сущности, используя беглый автомат 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");