2

我正在建立一个新项目,并让 NHibernate 使用结构映射...排序。我正在使用带有 ClassMaps 的 NHibernate.Mapping.ByCode.Conformist 设置。没有错误发生,但是当我查询会话并且数据库中存在特定类型的记录时,什么也没有返回。经过进一步检查,我为这些类型设置的映射似乎没有执行。这是我的代码,用于连接结构图。我可以确认它正在执行。

public class OrmRegistry : Registry
{
    public OrmRegistry()
    {
        var sessionFactory = BuildSessionFactory();
        For<ISessionFactory>().Singleton().Use(sessionFactory);
        For<ISession>().HybridHttpOrThreadLocalScoped().Use(s => sessionFactory.OpenSession());            

    }

    public ISessionFactory BuildSessionFactory()
    {
        var cfg = new Configuration().DataBaseIntegration(db =>
                                                              {
                                                                  db.ConnectionStringName = "LocalSqlServer";
                                                                  db.Dialect<MsSql2008Dialect>();
                                                                  db.Driver<SqlClientDriver>();
                                                                  db.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;
                                                                  db.IsolationLevel = IsolationLevel.ReadUncommitted;
                                                                  db.BatchSize = 500;
                                                              }).AddAssembly(Assembly.GetExecutingAssembly());

        if(HttpContext.Current != null)
        {
            cfg.CurrentSessionContext<WebSessionContext>();
        }
        else
        {
            cfg.CurrentSessionContext<ThreadStaticSessionContext>();
        }
        return cfg.BuildSessionFactory();
    }
}

我几乎可以肯定我只是在这里遗漏了一些非常明显的东西,但是我已经看了几个小时并且没有取得任何成功。前几天我也变小了,所以我周围没有同事看。

4

1 回答 1

2

看起来你已经初始化了你的配置,但是映射呢?您需要像这样初始化映射(如果您使用约定):

var mapper = new ConventionModelMapper();

// TODO: define conventions here using mapper instance

// just an example on how I have been using it
var entities = ... // get all entity types here
cfg.AddDeserializedMapping(mapper.CompileMappingFor(entities), "MyMappings");

return cfg.BuildSessionFactory();

如果您正在使用映射类(来自这篇文章),还有另一个例子:

var mapper = new ModelMapper();
var mappingTypes = typeof (InvoiceMapping).Assembly.GetExportedTypes()
    .Where(t => t.Name.EndsWith("Mapping")).ToArray();
mapper.AddMappings(mappingTypes);

cfg.AddMapping(mapper.CompileMappingForAllExplicitlyAddedEntities());

return cfg.BuildSessionFactory();
于 2012-07-05T15:54:29.127 回答