【问题标题】:Fluent NHibernate.Automapping change data type in DatabaseFluent NHibernate.Automapping 更改数据库中的数据类型
【发布时间】:2023-08-22 01:45:01
【问题描述】:

我是 FluentNHibernate 的新手。我正在使用自动映射。假设我有一个由 NHibernate 生成的数据库。有一个表,名为 Document,有 2 列

  • ID:整数
  • 说明:nvarchar(255)

映射到这个类

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

我想在数据库中将 Description 的数据类型从 nvarchar(255) 更改为文本,所以我创建了一个控制台应用程序如下:

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");
    }
}

没有错误,但什么也没发生,Description 列仍然是 nvarchar(255)。我不知道我在这里错过了什么。任何想法表示赞赏!谢谢

【问题讨论】:

  • 您缺少数据库创建或更新...
  • @DanielHilgarth:嗨,我想是的,但我不知道如何更新它

标签: c# fluent-nhibernate automapping


【解决方案1】:

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);

【讨论】: