Использование GUID с SQL Server и NHibernate - PullRequest
0 голосов
/ 06 октября 2010

Я использую NHibernate и SQL Server CE. Я пытаюсь использовать GUID в качестве столбца идентификатора.Это код, который у меня уже есть:

Отображение:

  <class name="DatabaseType" table="DBMON_DATABASE_TYPE">
    <id name="Id" column="DATABASE_TYPE_ID">
      <generator class="guid" />
    </id>
    <property name="DispName" />
  </class>

И это создает оператор, который он создает:

create table DBMON_DATABASE_TYPE (
    DATABASE_TYPE_ID BIGINT not null,
   DispName NVARCHAR(255) null,
   primary key (DATABASE_TYPE_ID)
)

И это вид вставкизаявление, которое я хочу иметь возможность выполнить на нем:

Insert into DBMON_DATABASE_TYPE (DATABASE_TYPE_ID,DISPNAME) values ('f5c7181e-e117-4a98-bc06-733638a3a264','DOC')

И вот эта ошибка, которую я получаю, когда пытаюсь это сделать:

Major Error 0x80040E14, Minor Error 26306
> Insert into DBMON_DATABASE_TYPE (DATABASE_TYPE_ID,DISPNAME) values ('f5c7181e-e117-4a98-bc06-733638a3a264','DOC')
Data conversion failed. [ OLE DB status value (if known) = 2 ]

Еще раз моя цель состоит в возможностииспользуйте GUID в качестве столбца ID моей таблицы, их даже не нужно автоматически генерировать, я могу сгенерировать их вручную в методах Save / SaveOrUpdate NHibernate.Если вам нужна какая-либо другая информация, пожалуйста, сообщите мне!

Ответы [ 3 ]

1 голос
/ 06 октября 2010

В вашем отображении вы должны указать, что вы хотите, чтобы NHibernate создал GUID в схеме базы данных (похоже, вы генерируете свою схему из отображения nhibernate).С макушки головы должно работать следующее:

<id name="Id" column="DATABASE_TYPE_ID" type="Guid">
  <generator class="guid" />
</id>
1 голос
/ 06 октября 2010

Смею ли я рекомендовать использовать GuidComb вместо?

1 голос
/ 06 октября 2010

вместо

DATABASE_TYPE_ID BIGINT not null,

должно быть

DATABASE_TYPE_ID UNIQUEIDENTIFIER not null,

Я бы настоятельно рекомендовал вам использовать NEWSEQUENTIALID() по умолчанию вместо этого, поскольку вы используете его в качестве кластеризованного индекса, поскольку он не вызовет разбиения страницы и, следовательно, фрагментации, смотрите здесь, как его использовать http://msdn.microsoft.com/en-us/library/ms189786.aspx

...