实体框架 - 无法将值NULL插入列中?

时间:2018-02-16 15:33:36

标签: c# visual-studio entity-framework-6

我已经查看了关于这个主题的所有类似问题,但似乎没有一个对我有用。当我尝试运行这两个命令时,我不确切地知道为什么会出现以下错误:add-migration然后update-database

  

无法将值NULL插入列'StudentId',表中   'ASPNET-JavaWebsiteProject-20171006053028.dbo.Groups';专栏没有   允许空值。更新失败。声明已经终止。

我正在使用Entity Framework v6.2.0。我有三个简单的模型:

public class Student
{
    public int Id { get; set; }

    public string UserId { get; set; }

    [EmailAddress]
    public string Email { get; set; }
}

教师模型:

public class Teacher
{
        public int Id { get; set; }

        public string UserId { get; set; }

        [EmailAddress]
        public string Email { get; set; }
    }

//组模型:

public class Group
{
    public int Id { get; set; }

    [Required]
    public int StudentId { get; set; }
    public Student Student { get; set; }

    [Required]
    public int TeacherId { get; set; }
    public Teacher Teacher { get; set; }
} 

任何人都可以指导我可能做错了什么或如何解决此错误?

谢谢

3 个答案:

答案 0 :(得分:2)

关联@StefanW。评论,如果Groups表已经存在并且您要向其添加StudentId(和其他)列,如果存在现有行,那么这些行将必须为每个新列指定一些值。如果您还没有为该列指定默认值,那么数据库将尝试使用NULL,这将失败,因为该列不允许空值。

答案 1 :(得分:1)

如果希望列可以为空,则应将模型的属性设置为可空类型。

public int? StudentId { get; set; }

在此之后,您将不得不再次创建和运行迁移。

答案 2 :(得分:0)

这个问题已经存在多年了。有很多关于它的话题。在大多数主题中,答案是“输入IsIdentity = true并在表设计中指定Identity的开始和步骤” ,或者将您的身份定义放入SQL,

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

喜欢

Cannot insert the value NULL into column 'Id', Entity framework

..对于大约75%的成员,该答案立即生效!但是..对于25%,似乎没有解决办法。有些主题的答案是公认的,建议使用迁移命令(edmx上下文)重新创建表,

Entity Framework Cannot insert the value NULL into column Identity Specification set to No

..但是我不想重新创建我的珍贵表,因此该过程是没有选择的。今天,我在这里解决了此问题,无需,无需重置任何表。原因很简单。我的连接字符串没有寻址到数据库,因此实际上我将表放在了同一台服务器上的另一个数据库中,而其中的IDENTITY [1,1]未在Table create中设置!当然,在调试时,我只检查了自己的数据库:),该数据库设置正确。但是表设计中的措施没有效果。当然不是。我在编辑错误的数据库!

为解决此问题,我将连接字符串更改为包括初始目录,

 CREATE TABLE ..
     [id] INT IDENTITY(1,1) NOT NULL
     ...

 <add name="MyDBContext"  connectionString="Data Source=..;Persist Security Info=True;User ID=..;Password=.."  providerName="System.Data.SqlClient" />

一个问题仍然存在.. Microsoft为什么不要求我们在app.config中设置Framework 6连接字符串的初始目录?上述过程可能会破坏现有的 other 数据库,而不会发出通知。