14

Вопрос по c#, .net, entity-framework – InvalidOperationException при вызове SaveChanges в .NET Entity Framework

Я пытаюсь научиться использовать платформу Entity, но столкнулся с проблемой, которую не могу решить. То, что я делаю, - это то, что я прохожу список моих фильмов и вставляю каждый из них в простую базу данных. Это код, который я ...

Также это происходит, когда вы используете сопоставления SotredProcedure для INSERT, UPDATE, DELETE, а ваш ключ ID является вычисляемым ключом внутри SP.

от Hamed Zakery Miab

Ответом для меня было установить<code>StoreGeneratedPattern=&quot;Identity&quot;</code> на имущество,<a href="http://www.matthewedmondson.info/2012/09/entity-framework-and.html" rel="nofollow noreferrer">see here for more details</a>.

от m.edmondson

8 ответов

7

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

bs.SuspendBinding();
Data.SaveChanges();
bs.ResumeBinding();

Важные вещи, о которых я хочу рассказать вам сегодня:

1 - если мы используем приведенный выше код для приостановки привязки, нам нужно сделать больше кода, чтобы исправить множество сценариев, таких как потерянный индекс в коллекциях и привязки основной детали

2 - если мы используем следующий код вместо приведенного выше кода, мы увидим, что исключение исчезло, и все будет хорошо, когда нет необходимости писать больше кода

        Data.SaveChanges(System.Data.Objects.SaveOptions.None);

Я надеюсь, что это решает ваши подобные проблемы

Спасибо друзья

6

Это исключение говорит о том, что у вас есть равные значения в нескольких строках столбца Id, который должен иметь только уникальные значения, поскольку он является ключевым столбцом. Entity Framework может обрабатывать такие столбцы двумя способами: либо вы (клиент) генерируете уникальные значения, либо сервер генерирует уникальные значения. В вашем случае кажется логичным разрешить Серверу генерировать автоинкрементные ключи.

У тебя естьStoreGeneratedPattern ключ установлен для столбца Id в вашем файле SSDL?

Вот пример изэтот пост:

<EntityType Name="rooms" Key="id">
    <Property Name="id" Type="int" Nullable="false" 
              StoreGeneratedPattern="Identity" />
    <Property Name="name" Type="nvarchar" Nullable="false" MaxLength="50" />
</EntityType>
2

System.Data.Objects.SaveOptions.None

Это решает проблему, но мне интересно, в чем разница между uning none и другими вариантами.

1

если у вас есть привязка к bindingsource, вы должны вызвать suspendbinding:

        bs.SuspendBinding();
        Data.SaveChanges();
        bs.ResumeBinding();
10

Я нашел решение для этого.

Случилось так, что когда я создал свою таблицу, я забыл добавить первичный ключ и установить для свойства (Is Identity) значение yes. Затем я создал свою модель сущности и получил эту ошибку.

Я вернулся и исправил свою таблицу базы данных, но у меня все еще было странное исключение. В итоге проблема была решена путем удаления сущности и ее повторного создания после исправления таблицы.

Нет больше исключений :)

0

У меня была похожая проблема с таблицей отношений, охватывающей три уровня, такие как Customer-> Order-> Order-Details с oracle 12C Auto-ID Trigger для генерации ключа. Вставка с использованиемSaveChanges() бросалSystem.InvalidOperationException.

Решение: функция увеличенияSaveChanges(System.Data.Objects.SaveOptions.None) предотвращает временное использование системыEntityKeys в состоянии граф объекта и в результате исключение исключается.

0

Также проверьте, установлен ли параметр & quot; Является ли личность & quot; свойство для другого столбца, чтобы "да" и вы вставляете дублированные значения в него.

0

Проверьте, отсутствуют ли первичные ключи в любой из ваших политик, если да, то создайте их и выполните «UpdateModel from Database».

Это должно решить проблему

Похожие вопросы