我已经查看了关于这个主题的所有类似问题,但似乎没有一个对我有用。当我尝试运行这两个命令时,我不确切地知道为什么会出现以下错误: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; }
}
任何人都可以指导我可能做错了什么或如何解决此错误?
谢谢
答案 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 数据库,而不会发出通知。