这是我第一个使用 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 映射它们。