【问题标题】:Fluent nHibernate automapping property as nvarchar(max)Fluent nHibernate 自动映射属性为 nvarchar(max)
【发布时间】:2010-08-20 15:19:44
【问题描述】:

使用流畅的 nhibernate 和自动映射(nhibernate 创建我的 db 架构),我怎样才能让 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)
}

【问题讨论】:

    标签: c# fluent-nhibernate nhibernate-mapping


    【解决方案1】:

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

    您应该能够将自动映射与使用 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
        }
    

    【讨论】:

    • thanx m8,经过少量配置并使用您的示例,它就像一个魅力..
    • 请记住,使用 .Length(int.MaxValue) 映射到 nvarchar (255)。此外,根本不使用 .Length,映射到 nvarchar (255)
    【解决方案2】:

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

    【讨论】:

    • 如何设置属性的长度?
    • 地图(x => x.).Length(10000) :-)
    • hmmmm 抱歉......也许我应该告诉你我在两天前开始使用 nhibernate :),这意味着我完全不知道必须去哪里。感谢您的帮助
    • 啊——我错过了自动映射部分,对此感到抱歉。请参阅这篇博文了解如何为单个属性实现它:serialseb.blogspot.com/2009/01/…
    猜你喜欢
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多