无法使用Nhibernate检索数据 [英] Cannot Retrieve Data with Nhibernate
问题描述
目标:
从包含三列的行中检索数据到名为aaa的类中
Goal:
Retrieve data from row containing three column into a class named aaa
问题:
-我检索到一条错误消息,因为它没有提供足够的错误说明,因此无法正常工作.
Problem:
-I retrieve a error message that it does not work because it doesn't provide enough with error explanation.
-我认为源代码不正确,无法检索数据并将其粘贴到类中.
-I believe that the source code is not correct to retrieve and paste the data into a class.
信息:
*我正在使用Nhibernate,VS 2013和SQL Server 2012.
Info:
*I'm using Nhibernate, VS 2013 and SQL server 2012.
NHibernate.exceptions.GenericADOException > InnerException > StackTrace
at System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName)
at System.Data.SqlClient.SqlDataReader.GetOrdinal(String name)
at NHibernate.Driver.NHybridDataReader.GetOrdinal(String name) in p:\nhibernate-core\src\NHibernate\Driver\NHybridDataReader.cs:line 363
at NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String name) in p:\nhibernate-core\src\NHibernate\Type\NullableType.cs:line 236
at NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String name, ISessionImplementor session, Object owner) in p:\nhibernate-core\src\NHibernate\Type\NullableType.cs:line 287
at NHibernate.Loader.Custom.CustomLoader.ScalarResultColumnProcessor.Extract(Object[] data, IDataReader resultSet, ISessionImplementor session) in p:\nhibernate-core\src\NHibernate\Loader\Custom\CustomLoader.cs:line 458
at NHibernate.Loader.Custom.CustomLoader.ResultRowProcessor.BuildResultRow(Object[] data, IDataReader resultSet, Boolean hasTransformer, ISessionImplementor session) in p:\nhibernate-core\src\NHibernate\Loader\Custom\CustomLoader.cs:line 395
at NHibernate.Loader.Custom.CustomLoader.GetResultColumnOrRow(Object[] row, IResultTransformer resultTransformer, IDataReader rs, ISessionImplementor session) in p:\nhibernate-core\src\NHibernate\Loader\Custom\CustomLoader.cs:line 284
at NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet, ISessionImplementor session, QueryParameters queryParameters, LockMode[] lockModeArray, EntityKey optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean returnProxies) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 365
at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 473
at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 251
at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 1564
NHibernate.exceptions.GenericADOException > TargetSite
at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 1573
at NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session, QueryParameters queryParameters) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 1472
at NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 1467
at NHibernate.Loader.Custom.CustomLoader.List(ISessionImplementor session, QueryParameters queryParameters) in p:\nhibernate-core\src\NHibernate\Loader\Custom\CustomLoader.cs:line 276
at NHibernate.Impl.SessionImpl.ListCustomQuery(ICustomQuery customQuery, QueryParameters queryParameters, IList results) in p:\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:line 2108
at NHibernate.Impl.SessionImpl.List(NativeSQLQuerySpecification spec, QueryParameters queryParameters, IList results) in p:\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:line 2091
at NHibernate.Impl.SessionImpl.List(NativeSQLQuerySpecification spec, QueryParameters queryParameters) in p:\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:line 2067
at NHibernate.Impl.SqlQueryImpl.List() in p:\nhibernate-core\src\NHibernate\Impl\SqlQueryImpl.cs:line 127
at NHibernate.Impl.AbstractQueryImpl.UniqueResult() in p:\nhibernate-core\src\NHibernate\Impl\AbstractQueryImpl.cs:line 960
at NHibernate.Impl.AbstractQueryImpl.UniqueResult[T]() in p:\nhibernate-core\src\NHibernate\Impl\AbstractQueryImpl.cs:line 947
at data_layer.NhibernateDataProvider.RetrieveSpecificContactInfoAboutAPerson(Int32 pPK_kund) in c:\arbete\main_system\data_layer\NhibernateDataProvider.cs:line 260
at usercontrol_kund.UserControl1.txtbox_sok_KeyDown(Object sender, KeyEventArgs e) in c:\arbete\main_system\usercontrol_kund\usercontrol_kund.xaml.cs:line 108
at System.Windows.Input.KeyEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
at System.Windows.Interop.HwndKeyboardInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawKeyboardActions actions, Int32 scanCode, Boolean isExtendedKey, Boolean isSystemKey, Int32 virtualKey)
at System.Windows.Interop.HwndKeyboardInputProvider.ProcessKeyAction(MSG& msg, Boolean& handled)
at System.Windows.Interop.HwndSource.CriticalTranslateAccelerator(MSG& msg, ModifierKeys modifiers)
at System.Windows.Interop.HwndSource.OnPreprocessMessage(Object param)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
at System.Windows.Interop.HwndSource.OnPreprocessMessageThunk(MSG& msg, Boolean& handled)
at System.Windows.Interop.HwndSource.WeakEventPreprocessMessage.OnPreprocessMessage(MSG& msg, Boolean& handled)
at System.Windows.Interop.ComponentDispatcherThread.RaiseThreadMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.Run()
at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window)
at System.Windows.Application.Run(Window window)
at System.Windows.Application.Run()
at main_system.App.Main() in c:\arbete\main_system\main_system\obj\Debug\App.g.cs:line 0
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="data_layer" namespace="data_layer">
<sql-query name="ddd">
<return-scalar column="a" type="int" />
<return-scalar column="b" type="string" />
<return-scalar column="c" type="string" />
exec ddd :Data
</sql-query>
</hibernate-mapping>
public class aaa
{
public int a { get; set; }
public string b { get; set; }
public string c { get; set; }
}
public ContactInfo RetrieveSpecificContactInfoAboutAPerson(int a)
{
return _session.GetNamedQuery("ddd").SetInt32("Data", a).UniqueResult<aaa>();
}
EXTEND:显示更新前的原始部分
EXTEND: showing the original part before update
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="data_layer" namespace="data_layer">
<sql-query name="ddd">
<return-scalar column="a" type="int" />
<return-scalar column="b" type="string" />
<return-scalar column="c" type="string" />
exec ddd :Data
</sql-query>
</hibernate-mapping>
public class aaa
{
public int a { get; set; }
public string b { get; set; }
public string c { get; set; }
}
public ContactInfo RetrieveSpecificContactInfoAboutAPerson(int a)
{
return _session.GetNamedQuery("ddd").SetInt32("Data", a).UniqueResult<aaa>();
}
推荐答案
需要进行一些调整才能使运行...
There are adjustments needed to make that running...
映射应包含传递的参数定义
(检查第一个元素:<query-param name="Data" type="int"/>
)
Mapping should contain the passing param definition
(check the first element:<query-param name="Data" type="int"/>
)
<sql-query name="ddd">
<query-param name="Data" type="int"/>
<return-scalar column="a" type="int" />
<return-scalar column="b" type="string" />
<return-scalar column="c" type="string" />
exec [dbo].[ddd] :Data
</sql-query>
那应该是NHibernate调用:
That should be the NHibernate call:
var a = 1;
var result = session.GetNamedQuery("ddd")
.SetInt32("Data", a)
.SetResultTransformer(Transformers.AliasToBean<aaa>())
.UniqueResult<aaa>();
其中最重要的是转换,在NHiernate中称为转换:
Where the essential is the conversion, called transformation in NHiernate:
.SetResultTransformer(Transformers.AliasToBean<aaa>())
所有人都这样打到SP:
That all being hitting the SP like this:
CREATE PROCEDURE ddd
@Data int
AS
BEGIN
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT 1 as A, 'B' as b, 'c' as c
END
GO
这篇关于无法使用Nhibernate检索数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!