Как временно отключить столбец IDENTITY в EF Code First? - PullRequest
5 голосов
/ 22 августа 2011

Я создаю переписывание существующего приложения в EF Code First, но мне нужно импортировать некоторые данные из базы данных существующего приложения. Вот определение моего класса сущности:

public class Business : EntityBase
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int AccountNumber { get; set; }

Теперь импортированные записи должны сохранять свое значение AccountNumber из старой системы. Однако для новых значений следует использовать значение IDENTITY, сгенерированное БД.

Как отключить IDENTITY во время импорта старых записей, а затем снова включить его до конца срока службы приложения? Выполнение этого перед импортом записей не имеет никакого эффекта:

context.Database.ExecuteSqlCommand("set identity_insert Businesses on");

Ответы [ 2 ]

4 голосов
/ 23 августа 2011

Вы не можете.Выполнение команды set identity_insert изменяет поведение SQL Server, но не поведение Entity Framework.

У вас есть три варианта импорта записей:

  • Использование необработанных команд ADO.NET(не объекты) или ExecuteSqlCommand.
  • Используйте другой DbContext, в котором вы определяете ключи как не сгенерированные.
  • Используйте другую технологию, которая больше подходит для преобразования данных,как SSIS
2 голосов
/ 23 августа 2011

Я недавно столкнулся с этой же проблемой. В моем случае я использовал SQL Server CE. Вот ссылка на мое решение:

Вставка всех строк DataTable в таблицу SQL Server, включая значения Id (прокрутите вниз, чтобы изменить 2)

Это в основном решение Диего № 1 - сырой ADO.NET. Это не очень хорошее решение, потому что вам нужно будет настроить запросы для учета любых различий в базах данных, но, надеюсь, это поможет решить вашу проблему на данный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...