postgresql中的存储过程:
CREATE OR REPLACE FUNCTION create_user()
RETURNS TABLE(id integer, name varchar(50), token varchar(50)) AS $$
declare
newUserId int;
BEGIN
INSERT INTO public.user(name) values ('User');
newUserId = currval('user_id_seq');
RETURN QUERY SELECT u.id, u.name, u.token FROM public.user u
where u.id = newUserId;
END;
$$ LANGUAGE plpgsql;
我有以下映射文件:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
<sql-query name="create_user">
<return class="User, <assembly>" />
select create_user()
</sql-query>
</hibernate-mapping>
型号:
public class User
{
public virtual int Id { get; protected set; }
public virtual string Name { get; set; }
public virtual Guid Token { get; set; }
}
数据库:
CREATE TABLE public."user"
(
id integer NOT NULL DEFAULT nextval('user_id_seq'::regclass),
name character varying(50) COLLATE pg_catalog."default" NOT NULL,
token character varying(50) COLLATE pg_catalog."default" NOT NULL DEFAULT (uuid_generate_v4())::text,
CONSTRAINT user_pkey PRIMARY KEY (id)
)
被调用的代码:
_session.GetNamedQuery(procedureName)
.SetResultTransformer(
Transformers.AliasToBean(typeof(User)))
.UniqueResult<User>();
此代码给出了一个错误:
&#34;在行中找不到字段:Id&#34;
来源:
&#34;&Npgsql的#34;
最后一帧:
&#34; Npgsql.BackendMessages.RowDescriptionMessage.GetFieldIndex(字符串 名)&#34;
在我打电话给数据库后,我得到了正确的回复,例如&#39;(1,&#39; name&#39;,GUID)&#39;
我做了一些调查,发现方法RowDescriptionMessage.GetFieldIndex在private _nameIndex = new Dictionary<string, int>
找不到名称时抛出此异常,因为我认为这应该包含类似
{
{"Id", 0},
{"Name", 1},
...
}
在我的情况下,但我发现只有{"create_user", 0}
,所以预计会有异常。
问题是:我做错了什么?为什么&#34; create_user&#34;被放置到集合而不是行字段。