Ich erstelle ein einfaches Tool, mit SchemaExport
dem Datenbank- und SQL-Skripte generiert werden. Bei einer einfachen Entität wird von einer Zeichenfolgeeigenschaft Description
eine ntext
Spalte in SQL Server erwartet, dies ist jedoch tatsächlich der Fall nvarchar(255)
.
Stellen Sie nicht sicher, welcher Teil ich falsch war, jeder Rat wird geschätzt!
Unten ist mein Code, erstelle einfach eine Konsolen-App und füge ein NHibernate
Nuget-Paket hinzu, um es auszuführen.
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;
}
}
}
Nach einiger weiterer Lektüre ntext
wird das in zukünftigen Versionen zusammen mit text and image
https://msdn.microsoft.com/en-us/library/ms187993.aspx entfernt
Text-, Text- und Bilddatentypen werden in einer zukünftigen Version von Microsoft SQL Server entfernt. Vermeiden Sie die Verwendung dieser Datentypen in neuen Entwicklungsarbeiten und planen Sie, Anwendungen zu ändern, die sie derzeit verwenden. Verwenden Sie stattdessen nvarchar (max), varchar (max) und varbinary (max).
Dieser Code wird also funktionieren
Property(e => e.Description, m =>
{
m.NotNullable(true);
m.Length(4001); // any value > 4K
});
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen