Не удается вставить NULL в столбец, не являющийся идентификатором, в Entity Framework. Забавная вещь… это не null?

#entity-framework #edmx

#entity-framework #edmx

Вопрос:

У меня есть таблица заказов на продажу со столбцами для ID и OrderID. ID — это автоматически сгенерированный int. OrderID — это строка, не допускающая обнуления, с максимальной длиной 20, и мы используем ее для хранения номера заказа клиента для справки.

После добавления моего нового SalesOrder и вызова SaveChanges я получаю следующую ошибку:

Не удается вставить значение NULL в столбец ‘OrderID’, таблица ‘SalesOrder’; столбец не допускает нулевых значений. ОШИБКА вставки. Оператор был завершен.

Проблема в том, что у объекта, который я сохраняю, на самом деле есть идентификатор заказа! Похоже, что сначала он пытается сохранить объект, прежде чем сохранять все значения. Это то, как EF обрабатывает вещи?

Моя настройка EF4.1, использующая подход, основанный на модели EDMX. Для StoreGeneratedPattern установлено значение None. Значение по умолчанию в настоящее время установлено на (None), но я пробовал разные значения. Ключ сущности равен False, поскольку он не является частью ключа. Я также попытался удалить объект SalesOrder и восстановить его из базы данных.

Комментарии:

1. можете ли вы предоставить код, в котором вы выполняете вставку? перед ‘SaveChanges()’ ?

Ответ №1:

Я также хотел бы увидеть ваш код…У меня были похожие проблемы при заполнении объектов в цикле, а затем сохранении их с помощью savechanges. Я думал, что все поля были заполнены, но это было не так.

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

Если ваша проблема похожа на мою, и вы вызываете savechanges после использования итератора для заполнения ваших объектов, то вы можете найти неверные данные, переместив savechanges в итератор так, чтобы он вызывался с каждой итерацией…но это все гипотетические догадки, не видя вашего кода…