2010-12-13 5 views
1

Имеет ли Fluent NHibernate простой способ автообновления сущностей?C# свободно nhibernate

Скажем, у меня есть некоторые классы, такие как следующие одно и соответствующих classmaps:

public sealed class Hello 
{ 
    public String Name { get; set; } 
    public DateTime Timestamp { get; set; } 
} 

public class HelloMapping : ClassMap<Hello> 
{ 
    public HelloMapping() 
    { 
     Not.LazyLoad(); 
     // Some Id here 
     Map(x => x.Name).Not.Nullable().Length(64); 
     Map(x => x.Timestamp).Not.Nullable(); 
    } 
} 

Таким образом, делает Fluent NHibernate имеет что-то вроде «добавить каждый отображенный объект как Hello»?

Если нет, то какой самый простой способ позволить NHibernate использовать мои сопоставления?

ответ

3

Это зависит от того, что вы подразумеваете под «как»?

Вы имеете в виду все сущности в том же пространстве имен? Затем вы можете сделать

public class MyConfiguration : DefaultAutomappingConfiguration { 
    public override bool ShouldMap(Type type) { 
     return type.Namespace == typeof(Hello).Namespace; 
    } 
} 

Все, что вы имели в виду, вероятно, можно установить конвенции сделать то, что это вы пытаетесь достичь. См. auto mapping in Fluent NHibernate.

+0

Верно ли, что если я отключу ленивую загрузку, свойства не обязательно должны быть виртуальными? Поскольку я предполагаю, что в этом случае не создаются прокси-серверы с ленивой загрузкой, а свойства доступны просто. Или я ошибаюсь? (просто знать :) –

+0

@ Yippie-Kai-Yay: Я не поймал, что вы отключили ленивую загрузку; вы на 100% правильны. – jason

0

Короткий ответ: http://wiki.fluentnhibernate.org/Auto_mapping. Вы можете использовать объекты и базовые соглашения, встроенные в FluentNH, для отображения объектов, которые не требуют большого пользовательского поведения.

Вы также можете использовать наследование для определения сопоставлений, которые имеют общие элементы для большинства или всех классов. Скажем, Hello - это базовый класс, который определяет Id, Name и Timestamp. Вы можете определить сопоставление для этого базового класса, затем либо извлечь из него непосредственно, чтобы произвести сопоставления для других объектов, либо вы могли бы определять сопоставления сопоставления SessionSubclass для объектов, которые должны храниться в общей структуре таблицы (как правило, потому что они представляют собой различные ароматы базы класс, например CheckingAccount, SavingsAccount и MoneyMarketAccount, - это все различные типы BankAccounts с существенно подобными структурами данных).

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