我有一个班级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)
?
提前致谢。
答案 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)?