如何在流畅的nHibernate中指定Columntype?
我有一个CaptionItem
类
public class CaptionItem { public virtual int SystemId { get; set; } public virtual int Version { get; set; } protected internal virtual IDictionary CaptionValues {get; private set;} }
我正在使用以下代码进行nHibernate映射
Id(x => x.SystemId); Version(x => x.Version); Cache.ReadWrite().IncludeAll(); HasMany(x => x.CaptionValues) .KeyColumn("CaptionItem_Id") .AsMap(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)
现在,我的问题是如何将columnt类型的Text
为nvarchar(max)
?
提前致谢。
我尝试了很多东西,但没有解决问题。 最终我解决了它。 我只是改变了映射代码中的一点。 新的映射代码如下
Id(x => x.SystemId); Version(x => x.Version); Cache.ReadWrite().IncludeAll(); HasMany(x => x.CaptionValues) .KeyColumn("CaptionItem_Id") .AsMap(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)
。
希望它能帮助别人。
您可以使用以下方法执行此操作:
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)?