2010-05-14 2 views
2

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

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

Благодаря

ответ

4

Мы использовали следующий подход успешно (с 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: Случай с Ссылки, к сожалению сложнее , пожалуйста, обратитесь к this Google Groups thread. Короче говоря:

// 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"]); 
} 

Это все пока.

Смежные вопросы