динамическое автозаполнение - PullRequest
3 голосов
/ 14 мая 2010

Кто-нибудь знает, как мы можем автоматически сопоставлять динамические компоненты с помощью Fluent Automapping в NHibernate?

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

Спасибо

1 Ответ

5 голосов
/ 06 июля 2011

Мы успешно использовали следующий подход (с FluentNH 1.2.0.712 ):

public class SomeClass
{
    public int Id { get; set; }
    public IDictionary Properties { get; set; }
}

public class SomeClassMapping : ClassMap<SomeClass>
{
    public SomeClassMapping()
    {
        Id(x => x.Id);

        // Maps the MyEnum members to separate int columns.
        DynamicComponent(x => x.Properties,
                         c =>
                            {
                                foreach (var name in Enum.GetNames(typeof(MyEnum)))
                                    c.Map<int>(name);
                            });
    }
}

Здесь мы сопоставили все элементы некоторого Enum в отдельные столбцы, где все они имеют тип int . Сейчас я работаю над сценарием, в котором мы используем разные типы динамических столбцов, который выглядит следующим образом:

// ExtendedProperties contains custom objects with Name and Type members
foreach (var property in ExtendedProperties)
{
    var prop = property;
    part.Map(prop.Name).CustomType(prop.Type);
}

Это тоже очень хорошо работает.

Я все еще собираюсь выяснить, как использовать References вместо Map для ссылки на другие типы, которые имеют свое собственное отображение ...

UPDATE: К сожалению, дело со ссылками сложнее, обратитесь к этой ветке групп Google . Короче говоря:

// This won't work
foreach (var property in ExtendedProperties)
{
    var prop = property;
    part.Reference(dict => dict[part.Name]);
}

// This works but is not very dynamic
foreach (var property in ExtendedProperties)
{
    var prop = property;
    part.Reference<PropertyType>(dict => dict["MyProperty"]);
}

Пока это все.

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