使用流畅的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)
}
答案 0 :(得分:30)
使用自动化,您可以覆盖文本字段的默认长度,但它将应用于所有文本字段。
您应该能够将自动化与使用流畅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)
}
}
我实际上从未使用过自动装置,所以我假设它会被正确拾取,但不确定。
不要忘记在配置中添加映射。
Fluently.configure(
// blah blah blah
.Mappings(m =>
{
m.FluentMappings.AddFromAssemblyOf<VirtualPage>();
m.AutoMappings.Add( // blah blah blah
}
答案 1 :(得分:2)
将Length属性设置为一个较大的数字(我使用10000) - 这将导致NHibernate生成一个nvarchar(max)