Установка пользовательского значения для автоинкрементного столбца в EF4 - PullRequest
0 голосов
/ 18 июля 2011

Я использую EF4 с ASP.NET. У сущности Subject есть поле Id, для которого в MySql установлено автоматическое увеличение. Обычно это прекрасно работает, но в одном случае мне нужно установить пользовательское значение для Id.

Subject sNone = new Subject { Id = 0, Title = "None", Code = "00" };
ctx.Subjects.AddObject(sNone);

Это действительно создает новую тему в базе данных. Однако для Id не установлено значение 0 - для него установлено значение автоинкремента.

Есть идеи, как мне это обойти?

1 Ответ

1 голос
/ 19 июля 2011

Вы не можете обойти это с EF. Как только столбец автоматически увеличивается, он настраивается в модели сущности с StoreGeneratedPattern.Identity. Это означает, что:

  • Столбец будет заполнен в базе данных, а значение передано обратно в приложение после вставки.
  • Это также означает, что значение этого столбца никогда не будет передано из вашего приложения.

Если вы отключите StoreGeneratedPattern, вы потеряете все это поведение, поскольку значение этого столбца будет обрабатываться как любое другое, и оно всегда будет передаваться в базу данных = ваша логика автоинкрементации не будет работать.

Существует также отдельная проблема - разрешено ли явно задавать значение для автоматически увеличиваемых столбцов в MySQL? В MSSQL Server это не так, если вы явно не включите его для соединения.

Лучший способ вставить эту запись с явным идентификатором - использовать старый ADO.NET или ExecuteStoreCommand на ObjectContext для непосредственного выполнения вставки SQL.

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