c#nhibernate

c#nhibernate,c#,mysql,nhibernate,fluent,C#,Mysql,Nhibernate,Fluent,查看更多:MySQLStored 大家好 我有一个c#+nhibernate+fluent+mysql的项目 我不明白为什么当这些信息在数据库中时,我必须映射hbm xml文件中的表,但这是其他讨论 我的项目包含用于存储过程的hbm文件 <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="PigCsharp.Entitie

查看更多:MySQLStored 大家好

我有一个c#+nhibernate+fluent+mysql的项目

我不明白为什么当这些信息在数据库中时,我必须映射hbm xml文件中的表,但这是其他讨论

我的项目包含用于存储过程的hbm文件

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="PigCsharp.Entities" assembly="PigCsharp">
  <sql-query name="getparametersbyparameter">
    <query-param name="iParameter" type="string" />
    <return class="mntparameters">
      <return-property column="mntparameters.ident" name="ident" />
      <return-property column="mntparameters.User" name="User" />
      <return-property column="mntparameters.Role" name="Role" />
      <return-property column="mntparameters.Parameter" name="Parameter" />
      <return-property column="mntparameters.value" name="value" />
      <return-property column="mntparameters.Module" name="Module" />
    </return>
    exec getparametersbyparameter   @iParameter = :iParameter
    <!--{ call getparametersbyparameter(:iParameter) }-->
  </sql-query>
</hibernate-mapping>
请你能帮帮我吗


首先,马可的权利;如果您有Fluent,那么对于绝大多数域映射,您应该使用从ClassMap派生的类,而不是HBMs。但是,指定命名查询是Fluent无论如何都做不到的,因此您需要的是HBM

至于为什么NHibernate在数据库已经知道模式并且消费者可以发现模式的情况下需要这些信息,首先,使用systables/sysobjects/syscolumns等视图以编程方式生成模式模型的过程可能会很耗时,其次,这只是等式的一半;指定映射时,您要告诉NHibernate您感兴趣的是架构的哪一部分,以及如何将域的每个字段或属性转换为架构字段。这并不总是一个明显的转变


不管怎样,解决你的问题。错误基本上是说明参数没有进入SQL字符串;相反,使用了数据库无法理解的占位符。我将仔细研究一下您是如何指定参数的,但不幸的是,我没有看到任何明显的错误

映射用于在POO和数据库之间创建连接

Nhibernate需要它将您所做的任何操作转换为所需的查询。 这是获得所需抽象的核心先决条件

顺便说一下,您可以使用


以下是一些示例

如果您使用的是Fluent NHibernate,那么您应该使用映射来创建表和类之间的关系,而不是hbm文件。。。
string param = "getDefaultDatabase";
                var query = session.GetNamedQuery("getparametersbyparameter")
                .SetParameter<string>("iParameter", param).List<mntparameters>();
No se controló NHibernate.Exceptions.GenericADOException
  Message=could not execute query
[ exec getparametersbyparameter   @iParameter = ?p0 ]
  Name:iParameter - Value:getDefaultDatabase
[SQL: exec getparametersbyparameter   @iParameter = ?p0]
  Source=NHibernate
  SqlString=exec getparametersbyparameter   @iParameter = ?p0
  StackTrace:
       en NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:línea 1703
       en NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session, QueryParameters queryParameters) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:línea 1601
       en NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:línea 1595
       en NHibernate.Loader.Custom.CustomLoader.List(ISessionImplementor session, QueryParameters queryParameters) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Custom\CustomLoader.cs:línea 272
       en NHibernate.Impl.SessionImpl.ListCustomQuery(ICustomQuery customQuery, QueryParameters queryParameters, IList results) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:línea 2052
       en NHibernate.Impl.SessionImpl.List(NativeSQLQuerySpecification spec, QueryParameters queryParameters, IList results) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:línea 2035
       en NHibernate.Impl.SessionImpl.List[T](NativeSQLQuerySpecification spec, QueryParameters queryParameters) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:línea 2021
       en NHibernate.Impl.SqlQueryImpl.List[T]() en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\SqlQueryImpl.cs:línea 163
       en PigCsharp.forms.FrmMDIExpedientacion.FrmMDIExpedientacion_Load(Object sender, EventArgs e) en C:\Code\PigCsharp\PigCsharp\forms\frmMDIExpedientacion.cs:línea 778
       en System.Windows.Forms.Form.OnLoad(EventArgs e)
       en System.Windows.Forms.Form.OnCreateControl()
       en System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
       en System.Windows.Forms.Control.CreateControl()
       en System.Windows.Forms.Control.WmShowWindow(Message& m)
       en System.Windows.Forms.Control.WndProc(Message& m)
       en System.Windows.Forms.ScrollableControl.WndProc(Message& m)
       en System.Windows.Forms.Form.WmShowWindow(Message& m)
       en System.Windows.Forms.Form.WndProc(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       en System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       en System.Windows.Forms.UnsafeNativeMethods.SendMessage(HandleRef hWnd, Int32 msg, Int32 wParam, Int32 lParam)
       en System.Windows.Forms.Form.SetVisibleCore(Boolean value)
       en System.Windows.Forms.Control.set_Visible(Boolean value)
       en System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       en System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       en System.Windows.Forms.Application.Run(Form mainForm)
       en PigCsharp.forms.submain.Main() en C:\Code\PigCsharp\PigCsharp\main\submail.cs:línea 29
       en System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       en System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       en Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       en System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       en System.Threading.ThreadHelper.ThreadStart()
  InnerException: MySql.Data.MySqlClient.MySqlException
       Message=Fatal error encountered during command execution.
       Source=MySql.Data
       ErrorCode=-2147467259
       Number=0
       StackTrace:
            en MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
            en MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
            en System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
            en NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\AdoNet\AbstractBatcher.cs:línea 247
            en NHibernate.Loader.Loader.GetResultSet(IDbCommand st, Boolean autoDiscoverTypes, Boolean callable, RowSelection selection, ISessionImplementor session) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:línea 1349
            en NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:línea 413
            en NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:línea 243
            en NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) en d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:línea 1694
       InnerException: MySql.Data.MySqlClient.MySqlException
            Message=Parameter '@iParameter' must be defined.
            Source=MySql.Data
            ErrorCode=-2147467259
            Number=0
            StackTrace:
                 en MySql.Data.MySqlClient.Statement.SerializeParameter(MySqlParameterCollection parameters, MySqlPacket packet, String parmName)
                 en MySql.Data.MySqlClient.Statement.InternalBindParameters(String sql, MySqlParameterCollection parameters, MySqlPacket packet)
                 en MySql.Data.MySqlClient.Statement.BindParameters()
                 en MySql.Data.MySqlClient.PreparableStatement.Execute()
                 en MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
            InnerException: