流畅的NHibernate.Automapping更改数据库中的数据类型

时间:2012-09-17 14:59:19

标签: c# fluent-nhibernate automapping

我是FluentNHibernate的新手。我正在使用AutoMapping。比方说,我有一个由NHibernate生成的数据库。有一个表,名为Document with two columns

  • Id:int
  • 描述:nvarchar(255)

映射到此类

public class Document
{
    public virtual int Id { get; set; }
    public virtual string Description{ get; set; }
}

我想将描述的数据类型从nvarchar(255)更改为Database中的文本,因此我创建了一个控制台应用程序,如下所示:

public class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Start process");           

        AutoMap.AssemblyOf<Document>().Override<Document>(y => y.Map(x => x.Description).CustomSqlType("text"));         

        Console.WriteLine("End process");
    }
}

没有错误,但没有任何反应,列描述仍然是nvarchar(255)。我不知道我在这里失踪了什么。任何想法都赞赏!感谢

1 个答案:

答案 0 :(得分:0)

SchemaUpdate无法更改列只添加它。但是,您可以重新创建(删除并创建)它。此外,如果您将文本字段的长度设置为特定阈值(通常为8k),那么大多数驱动程序将创建等效的“text”而不是“varchar”。

var config = Fluently.Configure()
    .Database(...)
    .Mappings(m => m.Automapping.Add(AutoMap.AssemblyOf<Document>().Override<Document>(y => y.Map(x => x.Description).Length(20000)))
    .BuildConfiguration();

new SchemaExport(config).Create(true, true);