Мы сталкиваемся с проблемой применения отношения «многие ко многим», используя свободное автоматическое отображение nhibernate.
Упрощенная форма модели предметной области выглядит следующим образом:
public class Group
{
private readonly IList<Recipient> _recipients = new List<Recipient>();
public virtual IList<Recipient> Recipients
{
get { return _recipients; }
}
}
public class Recipient
{
private readonly IList<Group> _groups = new List<Group>();
public virtual IList<Group> Groups
{
get { return _ groups; }
}
}
Поскольку приведенный выше код описывает, что группа и получатель имеют отношения «многие ко многим».
Мы используем автоматическую функцию беглого nhibernate, чтобы отобразить нашу модель домена с базой данных. Итак, нам нужно было использовать Конвенцию для автопреобразования.
Ниже приведен код, который мы использовали для соглашения многих ко многим: -
public class ManyToManyConvention : IHasManyToManyConvention
{
#region IConvention<IManyToManyCollectionInspector,IManyToManyCollectionInstance> Members
public void Apply(FluentNHibernate.Conventions.Instances.IManyToManyCollectionInstance instance)
{
if (instance.OtherSide == null)
{
instance.Table(
string.Format(
"{0}To{1}",
instance.EntityType.Name + "_Id",
instance.ChildType.Name + "_Id"));
}
else
{
instance.Inverse();
}
instance.Cascade.All();
}
#endregion
}
Я нашел это решение здесь:
http://blog.vuscode.com/malovicn/archive/2009/11/04/fluent-nhibernate-samples-auto-mapping-part-12.aspx#Many%20to%20Many%20convention
Но в приведенном выше коде во время отладки время для Recipients-> Groups и для Groups-> Recipients instance .OtherSide идет не равным NULL. Предположение было 1-й раз, когда instance.OtherSide будет не нулевым, а во второй раз он будет нулевым, так как отношения применяются с одной стороны, поэтому мы просто применим обратное к этому.
Таким образом, он создает 2 одинаковые таблицы сопоставления.
Загружается в базу данных, чтобы иметь 2 таблицы одинаковой схемы. Даже когда я пытаюсь сохранить нашу модель предметной области в базе данных, используя отношения «многие ко многим». Он сохраняет только одну сторону, т.е. он сохраняет получателей в группах, но не сохраняет группы в получателях. В базе данных также имеется запись только в одной таблице сопоставления, но не в обеих.
Итак, вопрос в том, правильно ли мы поступаем? Если нет, то как это сделать.