Как создать динамические отображения NHibernate без генерации файлов HBM XML? - PullRequest
1 голос
/ 02 июля 2011

Я работаю над динамическим приложением с NHibernate.Моя цель состоит в том, чтобы создать динамические сущности (как класс, так и файл сопоставления XML) на основе некоторых данных.Например, предположим, что я хочу динамически создавать объект Person во время выполнения и на лету.

Я использую Reflection.Emit для динамического создания типа класса.Для динамического создания картографирования я использовал код Айенде. .Но, к сожалению, этот код не работает, потому что mappings не имеет свойства Classes.Я пытался закодировать так же, как коды Castle ActiveRecord и Fluent NHibernate, но они генерируют файлы HBM XML.Поскольку я не хочу создавать / создавать файлы сопоставления, поэтому я не могу использовать эти решения.

Есть ли способ, как решение Ayende не заставлять генерировать файлы сопоставления HBM XML и просто делать все динамическив памяти?

Ответы [ 2 ]

2 голосов
/ 02 июля 2011

fluentnhibernate создает hbm в памяти только для того, чтобы передать их в nhibernate. У fluentnhibernate есть отличная функция автоматического определения стоимости с соглашениями, которые идеально подходят для этой ситуации. Также в FNH 2.0 они работают, чтобы пропустить hbm для лучшей производительности, но обычно вы никогда не увидите отображения вне памяти.

Пример:

Assembly assembly = GetDynamicallyCreatedTypesAssembly();

ISessionFactory sf = Fluently.Configure()
    .Database(...)
    .Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(assembly)))
    .BuildSessionFactory();
1 голос
/ 02 июля 2011

NHibernate 3.2 имеет слой mapping-by-code , который делает то, что вы хотите.

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

...