Нулевое значение не может быть присвоено участнику с системой типов. Int64, который является не допускающим NULL-значения типом значения

Я получаю следующую ошибку в своем использовании приложения MVC2 Linq к SQL (я плохо знаком с обоими). Я подключен к фактическому SQL-серверу не странный mdf:

System.InvalidOperationException The null value cannot be assigned to a member with type System.Int64 which is a non-nullable value type

Таблица My SQL имеет столбец под названием MessageID. Это - тип BigInt и имеет первичный ключ, NOT NULL и ИДЕНТИФИКАЦИОННЫЕ ДАННЫЕ 1 1, никакое Значение по умолчанию

В моем dbml разработчике это имеет следующее объявление для этого поля:

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_MessageId", AutoSync=AutoSync.OnInsert, DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
public long MessageId
{
    get
    {
        return this._MessageId;
    }
    set
    {
        if ((this._MessageId != value))
        {
            this.OnMessageIdChanging(value);
            this.SendPropertyChanging();
            this._MessageId = value;
            this.SendPropertyChanged("MessageId");
            this.OnMessageIdChanged();
        }
    }
}

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

Я делаю что-то глупое? Я не могу найти решение нигде!

Я сделал эту работу путем изменения типа этого свойства к Nullable но конечно это не может быть правильно?

Обновление: Я использую InsertOnSubmit. Упрощенный код:

public ActionResult Create(Message message)
{
    if (ModelState.IsValid)
    {
       var db = new MessagingDataContext();
       db.Messages.InsertOnSubmit(message);
       db.SubmitChanges(); //line 93 (where it breaks)
    }
}

повреждения на SubmitChanges () с ошибкой во главе этого вопроса.

Update2: Отслеживание стека:

   at Read_Object(ObjectMaterializer`1 )
   at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
   at System.Data.Linq.ChangeDirector.StandardChangeDirector.DynamicInsert(TrackedObject item)
   at System.Data.Linq.ChangeDirector.StandardChangeDirector.Insert(TrackedObject item)
   at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
   at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
   at Qanda.Controllers.MessagingController.Ask(Message message) in C:\Qanda\Qanda\Controllers\MessagingController.cs:line 93

Update3: Никто не знает, и у меня нет достаточного количества удара для предложения щедрости! Так продолженный мой блог ASP.NET. Помогите!

5
задан BritishDeveloper 21 April 2010 в 10:41
поделиться

2 ответа

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

6
ответ дан 14 December 2019 в 04:33
поделиться

Типы значений, которые вы определили в своем классе Result, необходимо настроить как допускающие значение NULL.

В вашем случае используйте int64?

Посмотрите объектный код в вашем файле designer.cs, который был сгенерирован дизайнером, если вы его используете.

Измените этот код и поместите его в частичный класс, чтобы разработчик не переписывал код.

2
ответ дан 14 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

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