Автоматическое добавочное поле Entity Framework, то есть не Id
Я знаю, что это не самое идеальное решение, но мне нужно добавить автоматически увеличивающееся поле в один из моих объектов EF Code First. Этот столбец id NOT Id, который является ориентиром.
В любом случае мне нужно определить поле автоматического увеличения в коде или создать сам столбец и определить в БД, что его автоматическое увеличение увеличивается?
Ответы
Ответ 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()).
Запустите свои модульные тесты и/или подключитесь к базе данных и запустите запрос выбора, который должен увидеть вашу таблицу в новой форме, добавьте некоторые данные, исключая столбец Идентификатор, и вы увидите новое руководство (или любой другой тип данных, который вы выбираете) для создания.