Я создал простой пример кода с обнуляемыми и ненулевыми целыми числами и свойствами datetime:
public class Person {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual int Length { get; set; }
public virtual int? LengthNullable { get; set; }
public virtual DateTime BirthDate { get; set; }
public virtual DateTime? BirthDateNullable { get; set; }
}
Я бы хотел бы , чтобы позволить классу "NHibernate.Tool.hbm2ddl.SchemaExport "для генерации следующего оператора DDL:
create table `Person` (
Id INTEGER NOT NULL AUTO_INCREMENT,
Name VARCHAR(255),
Length INTEGER not null,
LengthNullable INTEGER null,
BirthDate DATETIME not null,
BirthDateNullable DATETIME null,
primary key (Id)
)
Однако , когда я выполню код дальше, вместо этого будет создан следующий DDL:
create table `Person` (
Id INTEGER NOT NULL AUTO_INCREMENT,
Name VARCHAR(255),
Length INTEGER,
LengthNullable INTEGER,
BirthDate DATETIME,
BirthDateNullable DATETIME,
primary key (Id)
)
Как вы можете видеть, генератор DDL, кажется, не в состоянии сделать различие между "int?"и «int» (или между «DateTime?» и «DateTime») для генерации предложений «null» или «not null». Эта функция просто не поддерживается или я что-то не так делаю?
Я протестировал обе следующие комбинации версий:
но с тем же неудачным результатом
Ниже приведен мой класс "FluentNHibernateTableExporter", который я использовал для генерации приведенного выше оператора DDL:
using FluentNHibernate.Automapping;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate.Tool.hbm2ddl;
public class MyAutomappingConfiguration : DefaultAutomappingConfiguration
{
public override bool ShouldMap(Type type)
{
return type.Namespace == typeof(Person).Namespace;
}
}
public class FluentNHibernateTableExporter
{
public static void ExportMySqlSchema()
{
Fluently
.Configure()
.Database(
MySQLConfiguration.Standard.ConnectionString(
cs => cs
.Server("localhost")
.Database("MyDatabase")
.Username("MyUserName")
.Password("MyPassword")
).ShowSql()
)
.Mappings(
m => m.AutoMappings.Add(
AutoMap.AssemblyOf<Person>(new MyAutomappingConfiguration())
)
)
.ExposeConfiguration(
config =>
{
var schemaExport = new SchemaExport(config); // NHibernate.Tool.hbm2ddl
schemaExport.Execute(true, true, false);
}
)
.BuildConfiguration();
}
}