Передайте Guid методу ISession.Get <T>в NHibernate. - PullRequest
0 голосов
/ 28 июня 2011

Я сталкиваюсь с NHibernate 3.1.0 (пока без Fluent) в существующем решении в VS2010.Наша БД MsSql 2008 (я использую NHibernate.Dialect.MsSql2008Dialect в файле cfg.xml).
У меня есть объект ValidationActivity, который я хотел бы получить из БД.У него есть столбец ActivityID типа uniqueidentifier (в БД) / Guid (в бизнес-объекте).
Я следил за 1-м сеансом Summer Of NHibernate, поэтому мой провайдер:

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

В моем отображении используется генератор guid:
<id name="ActivityID" type="Guid"><br> <generator class ="guid"/><br> </id>

Чтобы проверить это, я создал тест, который пытается получить действие с известным Guid (который я вставил вручную) следующим образом:
NHibernateDataProvider provider = new NHibernateDataProvider();<br> Guid guid = new Guid("885f380d-c6e3-459e-8cff-10f96f26cc0a");<br> 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 Ответ

2 голосов
/ 28 июня 2011

Посмотрите на этот пост с похожей проблемой: Ошибка сопоставления в NHibernate

Вы пытались выполнить запрос выше, заменив?с фактическим guid в базе данных, что этот тест бьет?Все ли имена столбцов / таблиц одинаковы?Похоже, это может быть проблема с отображением.

...