2010-08-20 131 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