Я получаю следующую ошибку в приложении 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 блоге . Пожалуйста, помогите!