1

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
4

1 に答える 1

0

問題はラインにありました:

Register(Assembly.Load("ClassLibrary2").ValidationDefinitions()

私はそれを次のものに置き換えました:

Register(Assembly.Assembly.GetExecutingAssembly().ValidationDefinitions())
于 2013-03-16T03:49:18.957 に答える