Установите пользовательское значение идентификатора в поле автоинкремента - PullRequest
0 голосов
/ 12 апреля 2011

В моей БД (Sql server 2008) есть столбец идентификатора с включенным автонумерацией.Я использую EF и linq2entities

В каком-то конкретном сценарии я хотел бы иметь возможность установить собственный номер Id (очевидно, я полностью уверен, что это значение не повторяется), например, я бы использовал его для«заполнить» пропущенные номера идентификаторов, вызванные удалением.Я хочу сохранить в базе данных автоматическое приращение, проблема в том, что когда я делаю предложение linq, база данных назначает следующий номер Id, а не тот, который мне нравится.

Может быть, это немного странно, ноэто можно сделать с помощью linq2entities?

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

Ответы [ 2 ]

2 голосов
/ 12 апреля 2011

Я полагаю, что это невозможно, если в Entity Framework нет способа отключить «SET Identity_Insert TableName ON».

Обычно в SQL Server, когда вы отправляете удостоверение в поле, его нельзя заполнить вручную, если вы не выполните следующую инструкцию

SET Identity_Insert TableName ON

После выполнения этого оператора вы сможете заполнить поля удостоверений вручную.

Единственные другие варианты, которые я могу придумать, - это удалить атрибут Identity из столбца и создать собственный инкрементатор для поля в Entity Framework, используя частичный класс

как то так

public partial class EntityClassName : global::System.Data.Objects.DataClasses.EntityObject, IEntity
{
    partial void InitializeFields();

    Int64 IEntity.IdentityColumn
    {
        get { return IdentityColumn; }
        set { //some code for an incrementer 
              //and the ability to set manually 
              //if value provide is not null
            }
    }

}
0 голосов
/ 12 апреля 2011

Я не люблю категорически утверждать, что это невозможно, но это довольно бейсбольный мяч для L2E. Но это довольно простой триггер INSERT. Вы получите вставленную строку через INSERTED (Google объяснит), а затем обновите эту строку, используя любую сумасшедшую логику, какую захотите.

Я думаю, что вы можете часами биться головой об L2E, пытаясь это выяснить, или делать это в течение двадцати минут с помощью спускового крючка.

...