2012-05-03 4 views
33

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

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

ответ

51

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

+1

Я видел DatabaseGeneratedOption.Identity, но tbh Я был ленив и не читал в него, я просто предположил, что он сделал этот столбец полем PKey. Спасибо, я отдам его. – JamesStuddart

+0

Будет ли это работать с базами данных Multitenant? – amd

+0

@Ahmad Это не сработает, если у каждого арендатора есть свое собственное семя. – Eranga

6

Старое сообщение подумал, что я поделился тем, что нашел с 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 диспетчера пакетов:

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, чтобы specifiy столбец не nullabe и вы хотите установить его как столбец идентификатора, который будет высечен EF.

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

update-database 

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

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

Смежные вопросы