Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将null值分配给System.Int64类型的成员,该类型是不可为null的值类型_C#_Asp.net Mvc_Linq To Sql - Fatal编程技术网

C# 无法将null值分配给System.Int64类型的成员,该类型是不可为null的值类型

C# 无法将null值分配给System.Int64类型的成员,该类型是不可为null的值类型,c#,asp.net-mvc,linq-to-sql,C#,Asp.net Mvc,Linq To Sql,我在使用Linq to SQL的MVC2应用程序中遇到以下错误(我对这两种语言都是新手)。我连接到实际的SQL server,而不是奇怪的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类型,有一个主

我在使用Linq to SQL的MVC2应用程序中遇到以下错误(我对这两种语言都是新手)。我连接到实际的SQL server,而不是奇怪的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类型,有一个主键,不为NULL,标识为1,没有默认值

在my dbml designer中,此字段具有以下声明:

[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();
        }
    }
}
它一直告诉我null不能被赋值-我没有通过null!这是一个很长的-它甚至不能为空

我在做傻事吗?我到处都找不到解决办法

我通过将此属性的类型更改为
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()上中断,错误出现在问题的顶部

更新2: 堆栈跟踪:

   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
更新3:
没人知道,我也没有足够的影响力提供赏金!我继续说下去。请帮忙

您在结果类中定义的值类型需要设置为可空

在您的情况下,是否使用int64

如果正在使用设计器,请检查设计器生成的designer.cs文件中的目标代码


修改此代码并将其放在分部类中,这样设计者就不会过度编写代码。

这花了一段时间,但我发现这正在发生,我想与大家分享一下。这是因为表在insert上有一个触发器。我在这里写了更详细的内容。虽然这是实体框架的问题,但我仍然确信它是从一开始就引起我沮丧的触发器

我在调用一个存储过程时遇到了这个问题,该存储过程返回了3个表的数据,其中包含左外部联接。问题是一个Bigint类型的列为Null,因此我应用了ISNULL(OID,0)在LINQ中克服的过程中,首先检查导致异常的列,然后在表或EF模型中设置其默认值(如果正在使用)


如果不为此列保存任何内容,它将以默认值存储,此错误将不会再次发生。

是否尝试使用InsertOnSubmit方法,并且是否会导致此异常?能否显示导致此错误的代码?谢谢。我已经更新了我的问题你能给我们一个堆栈跟踪吗?我已经用StackTrace更新了,或者只是在dbml属性中设置它:nullable=false。好的,这是可行的,但为什么它应该是可空的呢?我注意到这可以修复它,但我想确保这是正确的做法。不仅值类型不能为null,数据库字段还返回null值,当传递这些值时,它们将抛出异常。通过将value-type变量设置为null-able,值类型可以接受null值。+1感谢您的博客。在浪费了两个小时毫无意义的调试之后,这是我能找到的唯一参考资料。关于这一点,我回到了ADO.Net。我也是+1,除了我的是System.Int32(标识列数据类型是INT);还有一个
而不是INSERT
触发器。潜在的问题是当触发器处于活动状态时,
SCOPE\u IDENTITY()
返回
NULL
(对我来说似乎是个bug);旧的不推荐值
@@IDENTITY
值是正确的。顺便说一句,这是一个已知的问题:感谢您为我指明了正确的方向。删除触发器不是一个选项。发现在触发器内部的输出中返回标识值有帮助。波斯特引导我走上了正确的方向。我需要将SCOPE_标识返回给调用代码,以获取插入行的ID。