Нулевое значение не может быть назначено члену с типом System.Int64, который является необнуляемым типом значения - PullRequest
5 голосов
/ 14 апреля 2010

Я получаю следующую ошибку в приложении MVC2, использующем Linq to 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

В моей таблице SQL есть столбец с именем MessageID. Это тип BigInt и имеет первичный ключ, NOT NULL и IDENTITY 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<long>, но, конечно, это не может быть правдой?

Обновление: Я использую 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 блоге . Пожалуйста, помогите!

Ответы [ 4 ]

6 голосов
/ 15 июня 2010

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

2 голосов
/ 16 апреля 2010

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

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

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

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

0 голосов
/ 17 декабря 2013

Сначала проверьте, какой столбец является причиной исключения, затем установите его значение по умолчанию в таблице или модели EF, если вы его используете.

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

0 голосов
/ 01 ноября 2012

У меня возникла эта проблема, вызывая хранимую процедуру, возвращающую данные 3 таблиц с левым внешним соединением, проблема заключалась в том, что столбец с типом Bigint был нулевым, поэтому я применил ISNULL (OID, 0) в процедуре, которую необходимо преодолеть в LINQ

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