C# 无法在ASP.NET MVC实体框架的列中插入值NULL

C# 无法在ASP.NET MVC实体框架的列中插入值NULL,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,尝试使用此代码时: var model = new MasterEntities(); var customer = new Customers(); customer.Sessionid = 25641; model.Customers.Add(customer); model.SaveChanges(); 我得到: {无法将值NULL插入到表的列'Sessionid'中 'master.dbo.Column';列不允许null.INSERT 失败。\r\n语句已终止。} 列Sessio

尝试使用此代码时:

var model = new MasterEntities();

var customer = new Customers();
customer.Sessionid = 25641;

model.Customers.Add(customer);
model.SaveChanges();
我得到:

{无法将值NULL插入到表的列'Sessionid'中 'master.dbo.Column';列不允许null.INSERT 失败。\r\n语句已终止。}

列Sessionid实际上是主键,并用[key]标记,如下所示:

 public class Customers
    {   
        [Key]
        public long Sessionid { get; set; }
        public long? Pers { get; set; }
    }
public class Customers
    {   
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public long Sessionid { get; set; }
        public long? Pers { get; set; }
    }
所以,根据问题,似乎当属性标记为[KEY]时,EF忽略了我自己的Sessionid声明,因为它期望数据库分配该值


那么我该如何解决这个问题呢?如果我删除[KEY],我得到的实体类型没有定义键异常…

您可以配置SQL,以便在插入时自动生成并自动递增表的主键。然后只需删除C中的[Key],您不需要在应用程序中手动设置ID,db将为您生成它。

我通过添加[DatabaseGeneratedDatabaseGenerateOptions.None]解决了这个问题,如下所示:

 public class Customers
    {   
        [Key]
        public long Sessionid { get; set; }
        public long? Pers { get; set; }
    }
public class Customers
    {   
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public long Sessionid { get; set; }
        public long? Pers { get; set; }
    }

在使用Microsoft SQL Server时,我多次遇到此问题,并采用相同的方法解决了此问题。要解决此问题,请确保将Identity Specification设置为Yes。下面是它的样子:

通过这种方式,列号通常会像主键一样自动递增


如何?:右键单击包含该列的表,选择“设计”,选择主键,然后在“列属性”窗口中“查找标识规范”并将其设置为“是”。

您的表实际上称为列吗?在主数据库中?可能是SessionID的副本,可能有自动增量?我同意@Martin。我认为在映射数据库和类时出现了问题。不@MartinSmith不是:我只是编辑了它以使其更清晰。您想这样做的具体原因是什么?从设计的角度来看,这不是“一般”的标准-您仍然可以让SQL生成一个通用ID列作为pKey,并手动设置您自己的“sessionID”,就好像它是一个常规的非键列一样..?是的,有一个特定的原因:但是在注释中很难理解这一点:听起来像Dean Varillas经常做的事情。。导致我退出。我找不到dllDatabaseGenerated@JohnNguyenDatabaseGenerated和DatabaseGenerateOption都位于System.ComponentModel.DataAnnotations.Schema命名空间中,后者是EntityFramework的一部分。确保您有EF的参考资料或安装了EF NuGet软件包。太棒了-谢谢您,先生!我已经尝试了4个小时的不同版本,直到我发现了你的优秀解决方案!