将Guid传递给NHibernate的ISession.Get <t>方法</t>

时间:2011-06-28 13:11:10

标签: nhibernate sql-server-2008 guid

我在VS2010的现有解决方案中遇到了NHibernate 3.1.0(没有Fluent)。我们的数据库是MsSql 2008(我在cfg.xml文件中使用了NHibernate.Dialect.MsSql2008Dialect)。
我有一个ValidationActivity对象,我想从DB中获取。它有一个类型为uniqueidentifier(在DB中)/ Guid(在业务对象中)的ActivityID列 我一直在关注Summer of NHibernate的第一次会议,所以我的提供者是:

public ValidationActivity GetActivityById(Guid activityGuid)
{
var sessionFactory = new configuration().Configure().BuildSessionFactory();
var session = sessionFactory.OpenSession();
return session.Get<ValidationActivity>(activityGuid);
}

我的映射使用guid生成器:​​
<id name="ActivityID" type="Guid">
<generator class ="guid"/>
</id>

为了对此进行测试,我创建了一个测试,尝试使用已知的Guid(我手动插入的一个)进行活动,如下所示:
NHibernateDataProvider provider = new NHibernateDataProvider();
Guid guid = new Guid("885f380d-c6e3-459e-8cff-10f96f26cc0a");
Activity testActivity = provider.GetActivityById(guid);

抛出的异常是'无法加载实体',其中包含以下SQL字符串:
SELECT validation0_.ActivityID as ActivityID0_0_, validation0_.ActivityName as Activity2_0_0_, validation0_.CreationDate as Creation3_0_0_, validation0_.Owner as Owner0_0_, validation0_.Project as Project0_0_, validation0_.Step as Step0_0_ FROM Activities validation0_ WHERE validation0_.ActivityID=?

在我看来,'?'最后是错的,但我不知道我做错了什么 请帮忙。
感谢。

1 个答案:

答案 0 :(得分:2)

看一下类似问题的帖子: Mapping Error in NHibernate

您是否尝试过运行上面的查询来替换?用这个测试命中的数据库中的实际guid?所有列/表名称是否相同?似乎它可能是一个映射问题。