Are you missing:-
query.SetString("RefreshToken ", “what ever your token is”);
Rippo
From: [email protected]
[mailto:[email protected]] On Behalf Of Paul Chapman
Sent: 25 November 2012 22:29
To: [email protected]
Subject: [nhibernate-development] could not execute native bulk manipulation
with an inner exception of 'The given key was not present in the dictionary'
when executing SQL 2008 Stored Procedure
I get the following error when executing a stored procedure
could not execute native bulk manipulation query:exec EmailAuthorizationsInsert
@Id=:Id @Email=:Email @AccessToken=:AccessToken @Expiration=:Expiration
@Issued=:Issued @RefreshToken=:RefreshToken[SQL: SQL not available]
Inner Exception is
The given key was not present in the dictionary
hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property
name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<property
name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Data
Source=pc-acer\dev;Initial Catalog=Email;Integrated Security=True</property>
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>
EmailAuthorization.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="GoogleEmailClient" namespace="GoogleEmailClient.BusinessObjects">
<class name="EmailAuthorization" table="EmailAuthorizations">
<id name="Id">
<generator class="guid" />
</id>
<property name="Email" />
<property name="AccessToken" />
<property name="Expiration" />
<property name="Issued" />
<property name="RefreshToken" />
</class>
</hibernate-mapping>
Code to execute Stored Procedure
ISession session = NHibernateHelper.GetCurrentSession();
IQuery query = session.CreateSQLQuery("exec
EmailAuthorizationsInsert @Id=:Id @Email=:Email @AccessToken=:AccessToken
@Expiration=:Expiration @Issued=:Issued @RefreshToken=:RefreshToken");
query.SetGuid("Id", Guid.NewGuid());
query.SetString("Email", user);
query.SetString("AccessToken", grantedAccess.AccessToken);
query.SetDateTime("Expiration",Convert.ToDateTime(grantedAccess.AccessTokenExpirationUtc));
query.SetDateTime("Issued",
Convert.ToDateTime(grantedAccess.AccessTokenIssueDateUtc));
query.ExecuteUpdate();
Stored Procedure being executed
CREATE PROCEDURE [dbo].[EmailAuthorizationsInsert]
@ID UniqueIdentifier,
@Email VarChar(MAX),
@AccessToken VarChar(MAX),
@Expiration DateTime,
@Issued DateTime,
@RefreshToken VarChar(MAX)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO EmailAuthorizations
(Email
, AccessToken
, Expiration
, Issued
, RefreshToken)
VALUES (@Email
, @AccessToken
, @Expiration
, @Issued
, @RefreshToken)
END
And for completeness the table definition
USE [Email]
GO
/****** Object: Table [dbo].[EmailAuthorizations] Script Date: 11/25/2012
22:28:04 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[EmailAuthorizations](
[ID] [uniqueidentifier] NOT NULL,
[Email] [varchar](max) NOT NULL,
[AccessToken] [varchar](max) NOT NULL,
[Expiration] [datetime] NOT NULL,
[Issued] [datetime] NOT NULL,
[RefreshToken] [varchar](max) NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
Any ideas
Thanks in advance