NHibernate: вставка сущности со значением идентичности, установленным в другом столбце - PullRequest
2 голосов
/ 23 марта 2011

Возможно ли с помощью NHibernate и Sql Server вставить сущность и установить одно из значений столбца для вновь созданного удостоверения?

В чистом sql я могу сделать это, добавив значение по умолчанию

Создайте таблицу:

create table Test
   id int identity,
   name varchar(12),
   parentId int NOT NULL

Добавьте ограничение:

alter table Test constraint ... default ident_current('Test') for parentId

И затем пропустите parentId или используйте ключевое слово DEFAULT:

insert into Test values('TEST')
insert into Test values('TEST', DEFAULT)

Исправьте меняесли я ошибаюсь, но думаю, что вышеприведенные утверждения никогда не будут сгенерированы NHibernate?

Пока я сначала сохраняю свою сущность, а затем обновляю ее вновь созданной идентификацией.Этот случай тормозит структуру базы данных, так как мне пришлось заставить этот конкретный столбец принимать значения NULL.

Сначала я думал, что это будет легко, но сейчас, спустя несколько часов, я все еще не могу найти ответ: /

Заранее спасибо

1 Ответ

2 голосов
/ 23 марта 2011

Это можно сделать с помощью сгенерированного атрибута в сопоставлении свойств . Для значений по умолчанию, установленных базой данных, используйте generated="insert". Для картирования Fluent NHibernate используйте .Generated().Insert().

EDIT:

public class Test
{
    private Test _parent;

    public Test()
    {
        _parent = this;
    }

    public Test Parent
    {
        get { return _parent == this ? null : _parent; }
        set { _parent = value ?? this; }
    }
}
...