nhibnernateを使用してスキーマを生成していますが、生成しないと制約が考慮されません。
public class Person
{
public virtual int Id { get; set; }
[NotNull]
public virtual string name { get; set; }
}
public class PersonMap : ClassMapping<Person>
{
public PersonMap()
{
Id(x => x.Id);
Property(x => x.name);
}
}
public class PersonVal : ValidationDef<Person>
{
public PersonVal()
{
Define(x => x.name).NotNullable();
}
}
私は次のように検証を構成に添付しています:
public static void SetupNHibernateValidator(Configuration config)
{
var nhvConfiguration = new FluentConfiguration();
nhvConfiguration
.SetDefaultValidatorMode(ValidatorMode.UseAttribute)
.Register(Assembly.Load("ClassLibrary2").ValidationDefinitions());
nhvConfiguration
.IntegrateWithNHibernate
.ApplyingDDLConstraints()
.RegisteringListeners();
//nhvConfiguration.Register(new [] { typeof(Person) });
nhvConfiguration.Register(new [] { typeof(PersonVal) });
ValidationEngine = new ValidatorEngine();
ValidationEngine.Configure(nhvConfiguration);
ValidatorInitializer.Initialize(config, ValidationEngine);
}
public static ISessionFactory BuildSessionFactory()
{
const string ConnectionString = @"XYZ";
_nhConfiguration = new Configuration( db =>
db.Dialect<MsSql2008Dialect>();
db.Driver<SqlClientDriver>();
db.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;
db.IsolationLevel = IsolationLevel.ReadCommitted;
db.ConnectionString = connection;
db.Timeout = 10;);
ValidationProvider.SetupNHibernateValidator(_nhConfiguration);
var mapping = GetMappings();
_nhConfiguration.AddDeserializedMapping(mapping, "ClassLibrary2");
return _sessionFactory = _nhConfiguration.BuildSessionFactory();
}
生成される出力は次のとおりです。
create table Person (
Id INT not null,
name NVARCHAR(255) null,
primary key (Id)
)
何が問題になるのでしょうか?NAMEフィールドはまだNULLとして定義されているので、NOTNULLである必要があります。
申し訳ありませんが、コードが多すぎることを知っています...
手伝ってくれてありがとう...
編集
コードによるマッピングを使用しています
using NHibernate.Validator.Cfg.Loquacious;
public class PersonVal : ValidationDef<Person>
using NHibernate.Mapping.ByCode.Conformist;
public class PersonMap : ClassMapping<Person>
using NHibernate.Validator.Constraints;
public class Person