2010-08-20 65 views
9

使用功能NHibernate和automappings(NHibernate的創建我的數據庫架構),我怎樣才能NHibernate的,以在數據庫中創建一個爲nvarchar(max)列基於以下類功能NHibernate自動映射財產爲nvarchar(最大)

public class VirtualPage : BaseEntity 
{ 
    public virtual int ParentId { get; set; } 
    public virtual string PageName { get; set; } 
    public virtual string Title { get; set; } 
    public virtual string Body { get; set; } 
    public virtual string ViewName { get; set; } 
    public virtual string ViewData { get; set; } // this must be nvarchar(max) 
} 

回答

27

有了自動映射可以覆蓋文本字段的默認長度,但它會被應用到所有文本字段。

您應該能夠將自動映射與使用流暢API創建的顯式映射結合起來。

幸運的是,這是一個非常簡單的類映射(我假設這是一個表,每個子類層次結構,這就是爲什麼我用SubClassMap<>代替ClassMap<>並沒有映射標識符的一部分):

public class VirtualPageMap : SubClassMap<VirtualPage> 
{ 
    public VirtualPageMap() 
    { 
     Map(x => x.ParentId); 
     Map(x => x.PageName); 
     Map(x => x.Title); 
     Map(x => x.Body); 
     Map(x => x.ViewName); 
     Map(x => x.ViewData).Length(4001); // anything over 4000 is nvarchar(max) 
    } 
} 

我實際上從來沒有使用automappings,所以我假設這將被正確拾取,但不確定。

不要忘記在你的配置中添加映​​射。

Fluently.configure(
    // blah blah blah 
    .Mappings(m => 
    { 
     m.FluentMappings.AddFromAssemblyOf<VirtualPage>(); 
     m.AutoMappings.Add(// blah blah blah 
    } 
+0

thanx m8,經過一些配置和使用你的例子它的工作就像一個魅力.. – 2010-08-27 20:04:13

+0

請記住,使用.Length(int.MaxValue)映射到nvarchar(255)。另外,根本不使用.Length,映射到nvarchar(255) – veeroo 2017-03-27 13:31:28

2

設置length屬性來大量(我用10000) - 這將導致NHibernate的做一個爲nvarchar(最大)

+0

如何設置一個屬性的長度? – 2010-08-20 15:32:56

+0

Map(x => x。).Length(10000):-) – Goblin 2010-08-20 15:41:48

+0

hmmmm對不起...也許我應該告訴你,我開始使用nhibernate 2天前:),這意味着我絕對不知道在哪裏一定要去。 thanx幫助雖然 – 2010-08-20 15:44:39