2010-10-22 3 views
0

У меня есть таблица с основным ключом GUID. В ActiveRecord он устанавливается с помощью PrimaryKeyType.GuidComb. Возможно ли создать эту запись с помощью назначенного вручную ПК? Если я установил первичный ключ в записи и запустил Create(), будет назначен новый идентификатор. Если я запустил Save(), я получу ошибку (как и следовало ожидать).Создать новую запись с назначенным PK - Замок ActiveRecord

Почему: Эта таблица находится в двух базах данных. Записи необходимо копировать между этими двумя базами данных. Я хотел бы сохранить идентификатор, когда запись перемещается по базам данных.

ответ

0

Я закончил настройку PrimaryKeyType на Assigned. Тогда я справился с перекрытой функции Create:

public override void Create() { 
     if (ID == default(Guid)) ID = GUIDGenerator.Generate(); 
     base.Create(); 
    } 

Было бы лучше сделать это в OnSave, но первичный ключ не может быть изменен в перехватчике. Это работает для моего приложения, однако этот код будет вызываться только в том случае, если объект явно создан. Он не будет работать, если объект создается каскадом.

1

№. Первичный ключ генерируется (например, GuidComb) или назначается вручную, он не может быть одновременно. Вы можете создать два класса, унаследованные от базового класса, определяющие все свойства, кроме первичного ключа, тогда каждый из этих двух классов определит их первичный ключ как назначенный или сгенерированный. Но я бы рекомендовал использовать SQL здесь, поскольку один INSERT INTO ... SELECT будет более эффективным, чем использование NHibernate/ActiveRecord.

 Смежные вопросы

  • Нет связанных вопросов^_^