0

Я разрабатываю свое приложение ASP.NET MVC4 с использованием EF Code-first, а также im, используя функцию Migrations. У меня есть конкретная сущность, и я хочу установить явные значения id по некоторым причинам. Как я могу это сделать? Я пытался отметить свойство идентификатора с атрибутом, как это:Исключительные значения идентификатора с использованием EF Code-first и миграции

public class NewsSource 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int Id { get; set; } 

    public string Title { get; set; } 

    public string WebSiteUrl { get; set; } 
} 

Тогда я добавить соответствующее перемещение, удаление базы данных и попытаться обновить базы данных с помощью метода Seed(), как это:

context.NewsSources.AddOrUpdate(x => x.Title, 
      new NewsSource {Id = 654, Title = "ABC", WebSiteUrl = @"http://www.abc.com/"}, 
      new NewsSource {Id = 22, Title = "XYZ", WebSiteUrl = @"http://XYZ.ru/"}); 

И ив получил это ошибка: «Невозможно вставить явное значение для столбца идентификатора в таблице« Источники новостей », если для параметра IDENTITY_INSERT установлено значение« ВЫКЛ ». Как я могу установить identity_insert в ON, используя EF и миграции. Как я понял из многих тем, это невозможно, и я должен использовать прямые SQL-команды. Я ошибаюсь?

+0

Я думаю, вы не ошибаетесь. До тех пор, пока вы добавите аннотацию '[Key]', EF захочет обработать этот идентификатор самостоятельно. Возможно, вам стоит рассмотреть другую структуру вашего стола. Возможно, у меня не так, но мое исследование дало мне тот же результат, что и ваш: это невозможно. – Atlasmaybe

ответ

1

У меня возникла проблема, когда я попытался изменить столбец в поле IDENTITY, когда он изначально не был идентификационным полем. See this question и this one. Вы должны удалить столбец и воссоздать его до remove IDENTITY, так что исправление внешних ключей и т. Д., Вероятно, слишком далеко, чтобы Entity Framework могла выполнять миграцию. Вам придется самостоятельно изменять методы Up() и Down(), или вы можете уйти от этого в базе данных.

+0

Я просто укусил это ... DropColumn («Клиент», «CustomerId»); AddColumn («Клиент», «CustomerId», c => c.Long (nullable: false, identity: false)); решил! –

0

Что произойдет, если вы удалите атрибут DatabaseGenerated и просто оставьте атрибут [Key]?

public class NewsSource 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string WebSiteUrl { get; set; } 
} 

Я столкнулся с этим вопросом некоторое время назад, и я считаю, что это была работа для меня. Я не могу проверить это сейчас, так как у меня нет проектов перед собой с EF в них. Все, что я могу сказать, это EF-код, и пакет миграции nuget - отличная вещь, если вы относитесь к ней так, как вы ее рассматриваете. Я воспользовался несколькими моментами WTF, когда использовал их вместе и пытался выложить сложные связанные модели. Удачи!

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