Свободный NHibernate имеет много ко многим вопросам Конвенции - PullRequest
6 голосов
/ 04 июня 2009

Я новичок в беглом nhibernate и nhibernate. Я хочу написать свободное соглашение по самосохранению nhibernate для создания сопоставлений «многие ко многим» для моих сущностей.

Это то, что у меня сейчас есть:

using System;
using FluentNHibernate.Conventions;
using FluentNHibernate.Mapping;

namespace Namespace
{
    public class HasManyToManyConvention : IHasManyToManyConvention
    {
        public bool Accept(IManyToManyPart target) {
            return true;
        }

        public void Apply(IManyToManyPart target) {
            var parentName = target.EntityType.Name;
            var childName = target.ChildType.Name;
            const string tableNameFmt = "{0}To{1}";
            const string keyColumnFmt = "{0}Fk";
            string tableName;

            if (parentName.CompareTo(childName) < 0) {
                tableName = String.Format(tableNameFmt, parentName, childName);
            }
            else {
                tableName = String.Format(tableNameFmt, childName, parentName);
            }

            target.WithChildKeyColumn(String.Format(keyColumnFmt, childName));
            target.WithParentKeyColumn(String.Format(keyColumnFmt, parentName));
            target.WithTableName(tableName);
            target.Cascade.All();
        }
    }
}

Кажется, это работает, но я чувствую, что есть лучший способ сделать это.

Теперь мои вопросы:

  1. У вас есть лучший способ сделать это?
  2. Вы обычно хотите здесь каскадное поведение?
  3. Должен ли я беспокоиться о чем-то, кроме того, чтобы убедиться, что обе стороны этой ассоциации имеют одинаковое имя таблицы?
...