Проверьте существующее сопоставление при написании пользовательского аппликатора в Conform

Я пишу свой первый настраиваемый аппликатор имени столбца для ConfORM.

Как проверить, что другой столбец уже сопоставлен с тем же именем сопоставления?

Это то, что я до сих пор:

public class MyColumnNameApplier : IPatternApplier<PropertyPath, IPropertyMapper>
{
    public bool Match(PropertyPath subject)
        {
            return (subject.LocalMember != null);
        }

        public void Apply(PropertyPath subject, IPropertyMapper applyTo)
        {
            string shortColumnName = ToOracleName(subject);
            // How do I check if the short columnName already exists?
            applyTo.Column(cm => cm.Name(shortColumnName));
        }

        private string ToOracleName(PropertyPath subject)
        {
            ...
        }
    }
}

Мне нужно сократить сгенерированные имена столбцов до менее чем 30 символов, чтобы соответствовать ограничению 30 символов Oracle. Поскольку я сокращаю имена столбцов, возможно, что одно и то же имя столбца потенциально может быть сгенерировано двумя разными свойствами. Я хотел бы знать, когда происходит дублирование сопоставления.

Если я не обработаю этот сценарий, ConfORM/NHibernate позволяет двум разным свойствам "совместно использовать" одно и то же имя столбца - это, очевидно, создает для меня проблему.

1 ответ

Если имена столбцов отображаются дважды, вы получите исключение в отношении количества параметров при первой загрузке. Вы можете проверить после настройки:

foreach (var clazz in config.ClassMappings)
{
    var propertiesWithOneColumn = clazz.PropertyClosureIterator.Where(p => p.ColumnSpan == 1);

    var distinctColumns = new HashSet<string>();
    foreach (var prop in propertiesWithOneColumn)
    {
        var col = prop.ColumnIterator.First().Text;
        if (distinctColumns.Add(col))
        {
            Console.WriteLine("duplicate column "+ col + " found for property " + prop.PersistentClass.ClassName + "." + prop.Name);
        }
    }
}
Другие вопросы по тегам