代码之家  ›  专栏  ›  技术社区  ›  stoic Kobus Kleynhans

fluent nhibernate automapping属性为nvarchar(max)

  •  10
  • stoic Kobus Kleynhans  · 技术社区  · 14 年前

    使用fluent nhibernate和automappings(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)
    }
    
    2 回复  |  直到 14 年前
        1
  •  30
  •   Jay    14 年前

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

    您应该能够将自动应用与使用Fluent 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
        }
    
        2
  •  2
  •   Goblin    14 年前

    将“长度”属性设置为高数值(我使用10000)-这将导致nhibernate生成nvarchar(max)