2010-12-13 220 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

這取決於「like」是什麼意思?

你是指同一個命名空間中的所有實體嗎?那麼你可以做

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

無論你是什麼意思,你可以設置一個約定來做你正在努力實現的。見auto mapping in Fluent NHibernate

+0

是真的,如果我禁用延遲加載屬性不必是虛擬的?因爲我猜在這種情況下不會生成延遲加載代理,並且只需訪問屬性。還是我誤會了? (只知道:) – 2010-12-13 22:35:16

+0

@ Yippie-Kai-Yay:我沒有注意到你禁用了懶惰加載;你是100%正確的。 – jason 2010-12-13 22:43:03

0

簡答題:http://wiki.fluentnhibernate.org/Auto_mapping。您可以使用FluentNH中內置的對象和基本約定來映射不需要太多自定義行爲的對象。

您也可以使用繼承來定義在大多數或所有類中都具有通用元素的映射。說Hello是一個定義Id,Name和Timestamp的基類。您可以爲此基類定義映射,然後直接從其派生出來以產生其他對象的映射,或者可以爲應存儲在公共表結構中的對象定義JoinedSubclass映射(通常是因爲它們是基類的各種風格類,像CheckingAccount,SavingsAccount和MoneyMarketAccount都是具有基本類似數據結構的不同類型的BankAccounts)。