InvalidOperationException при вызове SaveChanges в платформе Объекта.NET

Цель unsafePerformIO состоит в том, когда ваша функция выполняет некоторые внутренние действия, но не имеет побочных эффектов, которые наблюдатель заметил бы. Например, функция, которая берет вектор, копирует его, быстро сортирует копию на месте, а затем возвращает копию. strike> (см. комментарии) Каждая из этих операций имеет побочные эффекты, как и в IO, но общего результата нет.

newUnique должно быть действием IO, потому что оно каждый раз генерирует что-то новое. Это в основном определение IO, оно означает глагол , в отличие от функций, которые являются прилагательными . Функция всегда будет возвращать один и тот же результат для одинаковых аргументов. Это называется ссылочной прозрачностью.

Для правильного использования unsafePerformIO см. этот вопрос .

14
задан Paxxi 17 June 2009 в 19:04
поделиться

4 ответа

Я нашел решение этой проблемы.

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

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

Больше никаких исключений :)

10
ответ дан 1 December 2019 в 10:19
поделиться

This exception seems to tell you that you have equal values in severals rows in the Id column, which is supposed to only have unique values, because it's a key column. Entity Framework can handle such columns in two ways: either you (the Client) generates unique values, or the Server generates unique values. In your case it seems logical to allow the Server to generate autoincremented keys.

Do you have the StoreGeneratedPattern key set for the Id column in your SSDL file?

Here is an example from this blogpost:

<EntityType Name="rooms" Key="id">
    <Property Name="id" Type="int" Nullable="false" 
              StoreGeneratedPattern="Identity" />
    <Property Name="name" Type="nvarchar" Nullable="false" MaxLength="50" />
</EntityType>
6
ответ дан 1 December 2019 в 10:19
поделиться

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

        bs.SuspendBinding();
        Data.SaveChanges();
        bs.ResumeBinding();
1
ответ дан 1 December 2019 в 10:19
поделиться

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

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

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

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

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

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

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

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

7
ответ дан 1 December 2019 в 10:19
поделиться
Другие вопросы по тегам:

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