Вопрос по entity-framework – Поле автоматического увеличения Entity Framework, которое не является идентификатором

35

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

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

Ваш Ответ

2   ответа
57

DatabaseGenerated(DatabaseGeneratedOption.Identity), EF допускает только один столбец идентификаторов на таблицу.

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

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Bar { get; set; }
}
Я видел DatabaseGeneratedOption.Identity, но я был ленив и не читал его, я просто предположил, что этот столбец сделал поле PKey. Спасибо, я попробую. JamesStuddart
@ Ахмад Это не будет работать, если у каждого арендатора есть свое семя
Это все еще будет работать с базами данных Multitenant?
не работает для Oracle
Мне нужно оба, чтобы быть типомint, но он не работает с вашим кодом. Первичный ключ всегда равен 0. Есть идеи, почему это так?
7

что поделюсь тем, что нашел с Entity Framework 6.1.3.

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

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

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

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

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 ()).

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

Похожие вопросы