Entity Framework SaveChanges - как игнорировать поля ID / Identity на INSERT - PullRequest
1 голос
/ 20 июня 2010

Приложение VB .NET 4 WinForms.

У меня есть сетка (DevExpress), привязанная к IEnumerable (Of MyClass). Всякий раз, когда добавляется новая строка, идентификатор по умолчанию равен нулю (0). При попытке SaveChanges EntityFramework не осознает, что наличие поля идентичности означает, что оно должно игнорировать любое содержимое при вставке и просто вставлять другие значения. Я не могу указать null / Nothing, потому что он просто хранит идентификатор как ноль.

Я могу добавлять и сохранять экземпляры MyClass вручную, но я пытаюсь заставить его работать там, где сетка обрабатывает добавление / инициализацию / etc новых записей. Насколько я могу судить, проблема не в сетке, а в Entity Framework и сгенерированных классах SQL и сущностей.

{"Cannot insert explicit value for identity column in table 'MyClasses' when IDENTITY_INSERT is set to OFF."}

Буду очень признательна за любую помощь, чтобы я не выбросил свой ноутбук из окна!

1 Ответ

4 голосов
/ 20 июня 2010

Если свойство объекта является Identity (автоинкрементное значение) в базе данных, оно указывается в StorageModel вашей модели объекта. Возможно, этот параметр не подходит для вашей конкретной области. Вы можете проверить это, открыв файл edmx вашей модели и заглянув в раздел StorageModels. Это должно выглядеть так:

<edmx:StorageModels>
  ...
  <EntityType Name="MyClass">
    <Key>
      <PropertyRef Name="ID" />
    </Key>
    <Property Name="ID" Type="..." Nullable="..." StoreGeneratedPattern="Identity" />
    ...
  </EntityType>
  ...
</edmx:StorageModels>

StoreGeneratedPattern должно быть установлено на Identity. Если есть None или атрибут отсутствует (по умолчанию None), вы действительно получите ошибку, которую вы описали, поскольку EntityFramework в этом случае не знает, что ID является идентификатором, и выдаст значение для столбца в сгенерированном операторе SQL-INSERT.

(Убедитесь, что вы действительно проверяете раздел edmx:StorageModels в файле edmx. Раздел edmx:ConceptualModels также имеет атрибут annotation:StoreGeneratedPattern в свойстве, но его настройка не имеет значения для вашей конкретной проблемы. (I думаю, что это важно только тогда, когда база данных создается из модели, но я не уверен.))

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