NHibernate SchemaExport не создает текстовые столбцы

Я создаю простой инструмент, который использует SchemaExport для создания базы данных и сценариев SQL. На простом объекте одно строковое свойство Description ожидается ntext столбец в SQL Server, но на самом деле это nvarchar(255),

Не уверен, что в какой части я ошибся, любой совет приветствуется!

Ниже мой код, просто создайте консольное приложение + добавьте NHibernate пакет nuget для запуска.

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

1 ответ

Решение

После некоторого дальнейшего чтения, ntext будут удалены в будущих версиях вместе с text and image https://msdn.microsoft.com/en-us/library/ms187993.aspx

Типы данных ntext, text и image будут удалены в следующей версии Microsoft SQL Server. Избегайте использования этих типов данных в новых разработках и планируйте модифицировать приложения, которые их используют в настоящее время. Вместо этого используйте nvarchar(max), varchar(max) и varbinary(max).

Так что этот код будет работать

Property(e => e.Description, m =>
    {
        m.NotNullable(true);
        m.Length(4001); // any value > 4K
    });
Другие вопросы по тегам