Entity Framework - установить идентификатор нового объекта вручную - PullRequest
5 голосов
/ 30 марта 2012

Я использую Entity Framework (Database First) и пытаюсь импортировать кучу данных из старой базы данных в нашу новую. В некоторых случаях важно, чтобы идентификаторы объектов в новой базе данных оставались такими же, как и в старой. Обычно, когда вы создаете новый объект и вызываете context.SaveChanges (), он автоматически присваивает значение идентификатора столбцу ID.

В настоящее время происходит установка нового идентификатора объекта в коде, но после вызова context.SaveChanges () он перезаписывается новым, назначенным Entity Framework.

Мне нужно иметь возможность установить идентификатор в новом объекте вручную и оставить его, как только я вызову context.SaveChanges ().

Ответы [ 2 ]

6 голосов
/ 29 сентября 2015

Опция «Сгенерированная база данных» также может быть указана как атрибут самого свойства, а не с помощью плавного API.

public class Foo
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public virtual int Id { get; set;}
}
6 голосов
/ 30 марта 2012

Вы можете установить StoreGeneratedPattern в конструкторе моделей (или в файле EDMX) для ключевого свойства вашей сущности на None. Для столбцов целочисленных ключей это значение по умолчанию Identity, что означает, что Entity Framework не отправляет значения ключей в базу данных, поскольку ожидает, что база данных создаст ключ. Если шаблон None, он отправляет значение в базу данных, которую вы предоставляете вместе с сущностью.

(для DbContext (EF> = 4.1) это называется DatabaseGeneratedOption.)

Конечно, в то же время вам также необходимо отключить спецификацию Identity для ключевого столбца в таблице базы данных.

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