C# NHibernate SchemaExport不创建ntext列

C# NHibernate SchemaExport不创建ntext列,c#,nhibernate,orm,nhibernate-mapping,schemaexport,C#,Nhibernate,Orm,Nhibernate Mapping,Schemaexport,我创建了一个简单的工具,它使用SchemaExport生成数据库和sql脚本。在简单实体上,SQL Server中的一个字符串属性Description应该是ntext列,但实际上它是nvarchar(255) 不确定哪一部分我错了,任何建议都是感激的 下面是我的代码,只需创建一个控制台应用程序+添加NHibernatenumget包即可运行 using System; using NHibernate.Cfg; using NHibernate.Dialect; using NHiberna

我创建了一个简单的工具,它使用
SchemaExport
生成数据库和sql脚本。在简单实体上,SQL Server中的一个字符串属性
Description
应该是
ntext
列,但实际上它是
nvarchar(255)

不确定哪一部分我错了,任何建议都是感激的

下面是我的代码,只需创建一个控制台应用程序+添加
NHibernate
numget包即可运行

using System;
using NHibernate.Cfg;
using NHibernate.Dialect;
using NHibernate.Driver;
using NHibernate.Mapping.ByCode;
using NHibernate.Mapping.ByCode.Conformist;
using NHibernate.Tool.hbm2ddl;

namespace ConsoleApplication1
{
public class Item
{
    public int Id { get; set; }
    public string Description { get; set; }
}

public class ItemMap : ClassMapping<Item>
{
    public ItemMap()
    {
        Id(e => e.Id, m => m.Generator(Generators.Identity));

        Property(e => e.Description, m =>
        {
            m.NotNullable(true);
            m.Length(int.MaxValue);
        });
    }
}

class Program
{
    private const string ConnectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=db01;Integrated Security=True";

    static void Main(string[] args)
    {
        var modelMapper = BuildModelMapper();
        var configuration = GetConfiguration();
        configuration.AddDeserializedMapping(modelMapper.CompileMappingForAllExplicitlyAddedEntities(), null);

        try
        {
            new SchemaExport(configuration).Execute(false, true, false);
            Console.WriteLine("Done");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
        Console.ReadLine();
    }

    private static ModelMapper BuildModelMapper()
    {
        var mm = new ModelMapper();
        mm.AddMapping(typeof(ItemMap));
        return mm;
    }

    private static Configuration GetConfiguration()
    {
        var cfg = new Configuration();

        cfg.DataBaseIntegration(db =>
        {
            db.Driver<SqlClientDriver>();
            db.Dialect<MsSql2008Dialect>();
            db.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;
            db.ConnectionString = ConnectionString;
            db.LogFormattedSql = true;
            db.LogSqlInConsole = true;
            db.AutoCommentSql = true;
        });

        return cfg;
    }
}
}
使用系统;
使用NHibernate.Cfg;
使用NHibernate方言;
使用NHibernate.Driver;
使用NHibernate.Mapping.ByCode;
使用NHibernate.Mapping.ByCode.Conformist;
使用NHibernate.Tool.hbm2ddl;
命名空间控制台应用程序1
{
公共类项目
{
公共int Id{get;set;}
公共字符串说明{get;set;}
}
公共类ItemMap:类映射
{
公共项目映射()
{
Id(e=>e.Id,m=>m.Generator(Generators.Identity));
属性(e=>e.描述,m=>
{
m、 不可为空(true);
m、 长度(int.MaxValue);
});
}
}
班级计划
{
private const string ConnectionString=@“数据源=。\SQLEXPRESS;初始目录=db01;集成安全性=True”;
静态void Main(字符串[]参数)
{
var modelMapper=BuildModelMapper();
var-configuration=GetConfiguration();
AddDeserializedMapping(modelMapper.compileMappingForAllExplicitlyAddIdentities(),null);
尝试
{
新建SchemaExport(配置)。执行(false、true、false);
控制台。写入线(“完成”);
}
捕获(例外情况除外)
{
控制台写入线(ex);
}
Console.ReadLine();
}
私有静态模型映射器BuildModelMapper()
{
var mm=新的ModelMapper();
mm.AddMapping(typeof(ItemMap));
返回mm;
}
私有静态配置GetConfiguration()
{
var cfg=新配置();
数据库集成(db=>
{
db.Driver();
db.方言();
db.KeywordsAutoImport=Hbm2DDLKeyWords.AutoQuote;
db.ConnectionString=连接字符串;
db.LogFormattedSql=true;
db.logsqlincole=true;
db.AutoCommentSql=true;
});
返回cfg;
}
}
}

进一步阅读后,
ntext
将与
文本和图像一起在将来的版本中删除

在未来版本的Microsoft SQL Server中,将删除ntext、text和image数据类型。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。改用nvarchar(max)、varchar(max)和varbinary(max)

所以这个代码会起作用

Property(e => e.Description, m =>
    {
        m.NotNullable(true);
        m.Length(4001); // any value > 4K
    });

试过另一段吗?与10562一样,超过8000的值(varchar的SQL server限制)与MaxValue不同,这可能被视为特殊情况值?@SimonSvensson感谢您的建议。如果
ntext
text
image
数据类型将在SQL Server的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。改用
nvarchar(max)
varchar(max)
varbinary(max)
@是的,我现在明白了。非常感谢。