Создать новую запись с назначенным ПК - Замок ActiveRecord - PullRequest
0 голосов
/ 22 октября 2010

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

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

Ответы [ 2 ]

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

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

0 голосов
/ 22 октября 2010

Я закончил тем, что установил PrimaryKeyType в Назначенный. Затем я обработал его с помощью переопределенной функции Create:

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

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

...