Подтвердить что ты не робот

Автоматическое добавочное поле Entity Framework, то есть не Id

Я знаю, что это не самое идеальное решение, но мне нужно добавить автоматически увеличивающееся поле в один из моих объектов EF Code First. Этот столбец id NOT Id, который является ориентиром.

В любом случае мне нужно определить поле автоматического увеличения в коде или создать сам столбец и определить в БД, что его автоматическое увеличение увеличивается?

4b9b3361

Ответ 1

Вы можете аннотировать это свойство с помощью DatabaseGenerated(DatabaseGeneratedOption.Identity). EF разрешает только один столбец идентификатора для каждой таблицы.

public class Foo
{
    [Key]
    public Guid Id { get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Bar { get; set; }
}

Ответ 2

Старый пост подумал, что я поделился бы тем, что нашел с Entity Framework 6.1.3.

Я создал простую библиотеку слоев данных с использованием С# и .NET Framework 4.6.1, добавил простой класс репозитория/службы, первый контекстный класс кода и указал мой файл web.config на локальную базу данных SQL Express 2014.

В классе сущности я добавил следующий конструктор атрибутов в столбец Идентификатор:

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }

Затем я создал новую миграцию, введя следующее в диспетчере пакетов Visual Studio 2015:

Add-Migration

Дайте миграции имя, а затем дождитесь, когда будет создан класс DbMigtation. Отредактируйте класс и добавьте следующую операцию CreateTable:

CreateTable(
"dbo.Article",
    c => new
    {
        Id = c.Guid(nullable: false, identity: true),
        Title = c.String(),
        Content = c.String(),
        PublishedDate = c.DateTime(nullable: false),
        Author = c.String(),
        CreateDate = c.DateTime(nullable: false),
    })
    .PrimaryKey(t => t.Id);
}

Приведенная выше таблица является примером, ключевым моментом здесь является следующая аннотация для строителя:

nullable: false, identity: true

Это говорит EF, чтобы указать столбец как не nullabe, и вы хотите установить его как столбец идентификатора, который будет высечен EF.

Запустите миграцию с помощью следующей команды:

update-database

Это приведет к тому, что класс переноса сначала вытеснит таблицу (метод Down()), а затем создаст метод таблицы (Up()).

Запустите свои модульные тесты и/или подключитесь к базе данных и запустите запрос выбора, который должен увидеть вашу таблицу в новой форме, добавьте некоторые данные, исключая столбец Идентификатор, и вы увидите новое руководство (или любой другой тип данных, который вы выбираете) для создания.