Автоматическое сопоставление свойств в Fluent NHibernate - PullRequest
1 голос
/ 01 июня 2011

Я беру сложную унаследованную схему и сопоставляю ее с Fluent NHibernate. Схема достаточно дурацкая, что я разочаровался в автопроекции; отношения между таблицами странные и сложные, и это может привести к множеству исключений.

Дело в том, что простые свойства совершенно нормальны; столбец Title таблицы соответствует свойству Title этой сущности и т. д. Но поскольку я отказался от глобального автоматического сопоставления, похоже, не существует способа избежать сопоставления каждого из моих строковых и целочисленных свойств в каждом классе. Я чувствую, что хочу что-то вроде

class SomeMapping : ClassMap<SomeEntity>
{
    public SomeMapping()
    {
        MapEverythingSimple();
    }
}

Прежде чем я создам что-то сложное, которое рефлекторно испускает лямбда-выражения (или что-то подобное), я просто упускаю очевидную особенность?

Ответы [ 4 ]

1 голос
/ 01 июня 2011

Как насчет использования автоматического отображения, а затем переопределения, когда вещи не соответствуют соглашениям? Я не думаю, что это слишком много бремени. Вам нужно будет указать сложные отношения это в любом случае не вписывается в соглашение.

0 голосов
/ 06 июня 2011

Это не , что я в итоге и сделал, но для потомков, вот как вы можете отобразить свойства автоматически без использования автомпера:

public class PropMap<V> : ClassMap<V>
{
    public PropMap()
    {
        foreach (var propInfo in typeof(V).GetProperties()
            .Where(p => simpleTypes.Contains(p.PropertyType)))
        {
            ParameterExpression param = Expression.Parameter(typeof(V), "x");
            Map(Expression.Lambda<Func<V, object>>(
                Expression.Convert(Expression.MakeMemberAccess(param, propInfo), typeof(object)), param));
        }
    }

    private static readonly Type[] simpleTypes = new[]
    {
        typeof (DateTime),
        typeof (String),
        typeof (int),
        typeof (long),
        typeof (Enum)
    };
}

А потом просто наследуйте классы карты от этого. Очевидно, у него есть серьезные недостатки, и я не пошел с этим.

0 голосов
/ 01 июня 2011

Используйте пробную версию Visual NHibernate , чтобы быстро сгенерировать классы сущностей и отображения Fluent, а затем взять их оттуда. Отказ от ответственности: я работаю на Slyce Software.

0 голосов
/ 01 июня 2011

Или вы можете попробовать NHibernate Mapping Generator для генерации файлов сопоставления NHibernate и соответствующих классов домена из существующих таблиц БД: http://nmg.codeplex.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...