powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate: создание кастомного генератора id
5 сообщений из 5, страница 1 из 1
NHibernate: создание кастомного генератора id
    #36428686
Rodya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос к людям, пользующимся хибернатом.

Есть сборка PersistentData. И есть класс UUIDGenerator:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
namespace PersistentData
{
    public class UUIDGenerator : IIdentifierGenerator
    {
        ... 

        public object Generate(ISessionImplementor session, object obj)
        {
            ...
            return ...;
        }
    }
}

Хочу использовать этот класс в качестве кастомного генератора уидов:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="PersistentData" namespace="PersistentData">
  <class name="IPersistentObject" table="TBL_PERSISTENT_OBJECTS" abstract="true" >
    <id name="uuid">
      <column name="UUID"/>
      <generator class="PersistentData.UUIDGenerator"/>
    </id>
  </class>
</hibernate-mapping>

Однако, BuildSessionFactory() выкидавет исключение:
авторCould not interpret id generator strategy: PersistentData.UUIDGenerator. Possible cause: no assembly name specified.

Народ, где я туплю?
...
Рейтинг: 0 / 0
NHibernate: создание кастомного генератора id
    #36428991
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="PersistentData" namespace="PersistentData">
  <class name="IPersistentObject" table="TBL_PERSISTENT_OBJECTS" abstract="true" >
    <id name="uuid">
      <column name="UUID"/>
      <generator class="PersistentData.UUIDGenerator, PersistentData"/>
    </id>
  </class>
</hibernate-mapping>

P.S. Возможны коллизии при одинаковых assembly name и namespace, проверьте.
...
Рейтинг: 0 / 0
NHibernate: создание кастомного генератора id
    #36430214
Rodya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал. Проблема осталась. Даже сообщение об ошибке то же.

Дальше в маппинге меняю на <generator class="UUIDGenerator, PersistentData"/>
Ошибка: System.TypeLoadException: Could not load type 'UUIDGenerator' from assembly 'PersistentData, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

Меняю namespace на PersistentData.Generator. Т.е.:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
namespace PersistentData.Generator
{
    public class UUIDGenerator : IIdentifierGenerator
    {
        public object Generate(ISessionImplementor session, object obj)
        {
            return Guid.NewGuid();
        }
    }
}

В маппинге пишу:
<generator class="PersistentData.Generator.UUIDGenerator, PersistentData"/>

Получаю ошибку:
Could not load type PersistentData.UUIDGenerator. Possible cause: no assembly name specified.
Дважды проверил, что все перебилдилось, а загрузить он все равно пытается PersistentData.UUIDGenerator, а не PersistentData.Generator.UUIDGenerator.

Хрен с ним. В маппинге пишу
<generator class="Generator.UUIDGenerator, PersistentData"/>

Получаю:
System.TypeLoadException: Could not load type 'UUIDGenerator' from assembly 'PersistentData, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

Также переносил класс генератора в другую сборку. Там игрался с неймспейсами. Нифига не помогает.

МСУP.S. Возможны коллизии при одинаковых assembly name и namespace, проверьте.

Может быть так и есть, но даже при изменении неймспейса ниче не помогает.
Понятно, что это я туплю жеско, но где? Ткните носом...
...
Рейтинг: 0 / 0
NHibernate: создание кастомного генератора id
    #36430382
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не помню, то ли PersistentData, то ли UUIDGenerator - зарезервированное имя, когда-то обсуждалось на каком-то форуме по хибу. Меняйте неймспейс и название генератора.

Вот тестовый пример, он прекрасно работает:

sample
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE [dbo].[BOOKS](
	[ID] [int] IDENTITY( 1 , 1 ) NOT NULL,
	[ISBN] [nvarchar]( 255 ) NULL,
	[TITLE] [nvarchar]( 255 ) NULL,
 CONSTRAINT [PK_BOOKS] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public class Book
{
    public class Properties
    {
        public const string Book = "Book";
        public const string ID = "ID";
        public const string ISBN = "ISBN";
        public const string TITLE = "TITLE";

        private Properties() { }
    }

    public Book()
    {
    }

    public Book(string isbn, string title)
    {
        ISBN = isbn;
        TITLE = title;
    }

    public virtual int ID { get; set; }
    public virtual string ISBN { get; set; }
    public virtual string TITLE { get; set; }
}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="MySpace" assembly="MySpace">
	<class name="Book" table="BOOKS">
		<id name="ID">
			<column name="ID" />
			<generator class="MySpace.MyGenerator, MySpace" />
		</id>
		<property name="ISBN" />
		<property name="TITLE" />
	</class>
</hibernate-mapping>

Код: plaintext
1.
2.
3.
4.
5.
6.
public class MyGenerator : IIdentifierGenerator 
{
    public object Generate(ISessionImplementor session, object obj)
    {
        return 3;
    }
}
...
Рейтинг: 0 / 0
NHibernate: создание кастомного генератора id
    #36430478
Rodya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУто ли PersistentData, то ли UUIDGenerator - зарезервированное имя

СПАСИБО!!!
Действительно поменял имя неймспейса, сборки и класса и все заработало.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate: создание кастомного генератора id
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]