Самостоятельное сопоставление многих и многих взаимосвязей в автоматизированном автоматическом форматировании Fluent NHibernate до 1: n, а не n: n
Название в значительной степени объясняет все это, у меня есть объект Member, который ссылается на "Друзья", которые также являются членами типа.
public class Member : Entity
{
public Member()
{
Friends = new List<Member>();
}
public virtual IList<Member> Friends
{
get; set;
}
}
Инструмент генерации схемы делает это отношением 1: n, в то время как это должно быть отношение n: n, то есть столбец добавляется в таблицу-член, именуемую member_id, и не создается соединительная таблица.
Есть ли способ сделать Self ссылкой на многие из многих отношений в Fluent NHibernate?
Я попытался использовать переопределение, которое я получил как ответ раньше:
public class MemberOverride : IAutoMappingOverride<Member>
{
public void Override(AutoMapping<Member> mapping)
{
mapping.HasManyToMany(m => m.Friends)
.Table("MemberFriendsLinkTable");
}
}
но я получаю сообщение об ошибке:
"NHibernate.MappingException: повторный столбец в сопоставлении для коллекции: столбец Proj.BO.Member.Friends: Member_id"
Спасибо
EDIT: Я нашел ответ, чтобы поставить:
mapping.HasManyToMany(m => m.Friends).ParentKeyColumn("Member_Id").ChildKeyColumn("Friend_Id")
.Table("MemberFriendsLinkTable").Inverse().Cascade.SaveUpdate();
Ответы
Ответ 1
Итак, мне больше не нужно видеть этот вопрос в верхней части списка "Вопросы без ответа NHibernate"...
Эйтан, искатель, обнаружил решение своей проблемы. Ему нужно было указать ParentKeyColumn
и ChildKeyColumn
следующим образом:
РЕДАКТИРОВАТЬ: Я нашел ответ, чтобы поставить:
mapping.HasManyToMany(m => m.Friends)
.ParentKeyColumn("Member_Id")
.ChildKeyColumn("Friend_Id")
.Table("MemberFriendsLinkTable")
.Inverse()
.Cascade.SaveUpdate();
FluentNHibernate по умолчанию именует столбцы внешнего ключа следующим образом: {className}_Id
. Поскольку оба конца множества ко многим относятся к одному типу, он хотел использовать одно и то же имя столбца, Member_Id
для обоих столбцов. Явное назначение столбцов обходит эту проблему.
Ответ 2
References(x => x.Parent)
.Class<Parent>()
.Access.Property()
.Cascade.None()
.LazyLoad()
.Not.Insert()
.Not.Update()
.Columns("PARENT_ID");
HasMany(x => x.Children)
.Access.Property()
.AsBag()
.Cascade.SaveUpdate()
.LazyLoad()
.Inverse()
.Generic()
.KeyColumns.Add("PARENT_ID", mapping => mapping.Name("PARENT_ID")
.SqlType("NUMBER")
.Not.Nullable());
Ответ 3
Хорошо, я понимаю, что у меня такая же проблема с небольшими изменениями. Не могли бы вы попытаться ответить на вопрос по ссылке
Свободное сопоставление m-to-m nhibernate с внешней таблицей