流畅的nHibernate自动化属性为nvarchar(max)

使用流畅的nhibernate和自动化(nhibernate创建我的数据库模式),我怎么能得到nhibernate在数据库中基于以下类创建一个nvarchar(max)列

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) } 

使用自动化,您可以覆盖文本字段的默认长度,但它将应用于所有文本字段。

您应该能够将自动化与使用流畅API创建的显式映射相结合。

幸运的是,这是一个非常简单的映射类(我假设这是每子类表层次结构的一部分,这就是为什么我使用SubClassMap<>而不是ClassMap<>而不映射标识符):

 public class VirtualPageMap : SubClassMap { 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) } } 

我实际上从未使用过自动装置,所以我假设它会被正确拾取,但不确定。

不要忘记在配置中添加映​​射。

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

将Length属性设置为一个较大的数字(我使用10000) – 这将导致NHibernate生成一个nvarchar(max)