2

这是我第一个使用 NHibernate 的项目,我遇到了映射问题。我的域类映射是使用 FluentNhibernate 流畅映射完成的,这些映射运行良好。

但是现在我需要映射一个存储过程,这意味着我需要依赖hbm.xml文件。所以我添加了一个NamedQueries.hbm.xml这样的名称:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" >
  <sql-query name="GetLatestTrackings">
    <return-scalar column="TrackingId" type="Int32" />
    <![CDATA[
      exec Core.GetLatestTrackings
    ]]>
  </sql-query>
</hibernate-mapping>

流畅的映射如下所示:

        FluentConfiguration configuration = Fluently
            .Configure()
            .Database(MsSqlConfiguration
                          .MsSql2008
                          .ConnectionString(c => c.FromConnectionStringWithKey("Con")))
            .Mappings(m =>
                {
                    m.HbmMappings.AddFromAssembly(assemblyWithMappings);
                    m.FluentMappings.AddFromAssembly(assemblyWithMappings);
                });

        var nhibConfig = configuration.BuildConfiguration();

        SchemaMetadataUpdater.QuoteTableAndColumns(nhibConfig);

        return configuration.BuildSessionFactory();

但在运行时我得到以下异常:

DuplicateMappingException, Duplicate query / sql-query mapping GetLatestTrackings

目前我正在考虑使用 ADO.NET 进行存储过程调用,因为我完全没有想法通过 NHibernate 映射它们。

4

0 回答 0