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