如何在流畅的nHibernate中指定Columntype?

时间:2010-04-15 12:08:07

标签: c# nhibernate fluent-nhibernate

我有一个班级CaptionItem

public class CaptionItem
    {
        public virtual int SystemId { get; set; }
        public virtual int Version { get; set; }        
        protected internal virtual IDictionary<string, string> CaptionValues {get; private set;}
}

我正在使用以下代码进行nHibernate映射

Id(x => x.SystemId);
            Version(x => x.Version);
            Cache.ReadWrite().IncludeAll();
            HasMany(x => x.CaptionValues)
                .KeyColumn("CaptionItem_Id")
                .AsMap<string>(idx => idx.Column("CaptionSet_Name"), elem => elem.Column("Text"))
                .Not.LazyLoad()
                .Cascade.Delete()
                .Table("CaptionValue")
                .Cache.ReadWrite().IncludeAll();

因此在数据库中创建了两个表。一个CaptionValue和其他CaptionItem。在CaptionItem表中有三列

1. CaptionItem_Id     int
2. Text               nvarchar(255)
3. CaptionSet_Name    nvarchar(255)

现在,我的问题是如何将Text列为nvarchar(max)

提前致谢。

2 个答案:

答案 0 :(得分:2)

我尝试了很多东西,但没有解决问题。最终我解决了它。我只是改变了映射代码。新的映射代码如下所示

Id(x => x.SystemId);
            Version(x => x.Version);
            Cache.ReadWrite().IncludeAll();
            HasMany(x => x.CaptionValues)
                .KeyColumn("CaptionItem_Id")
                .AsMap<string>(idx => idx.Column("CaptionSet_Name"), elem => elem.Columns.Add("Text", c => c.Length(10000)))
                .Not.LazyLoad()
                .Cascade.Delete()
                .Table("CaptionValue")
                .Cache.ReadWrite().IncludeAll();

所以我刚刚添加了c => c.Length(10000)。现在,在数据库中,Text的columntype将为nvarchar(MAX)

希望它会帮助其他人。

答案 1 :(得分:1)

您可以使用以下方法执行此操作:

Id(x => x.Text).CustomSqlType("nvarchar(max)"); 

// For older versions of Fluent NHibernate   
Id(x => x.Text).CustomSqlTypeIs("nvarchar(max)"); 

修改

Bipul,为什么不为CaptionValues创建一个映射,并在该映射中指定Text的类型是nvarchar(max)?