我尝试使用EntityFramework 6向SQL数据库添加一个对象,它看起来像这样:
表:
CREATE TABLE [dbo].[jobb](
[starttid] [datetime] NULL,
[sluttid] [datetime] NULL,
[rowversion] [timestamp] NOT NULL,
[service] [nvarchar](100) NOT NULL,
[jobb_key] [int] NOT NULL,
CONSTRAINT [PK_service_jobb] PRIMARY KEY CLUSTERED
(
[jobb_key] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
代表表格的类:
public class Jobb
{
public DateTime? starttid { get; set; }
public DateTime? sluttid { get; set; }
[Timestamp]
public byte[] rowversion { get; set; }
public string service { get; set; }
[Key]
public int jobb_key { get; set; }
}
试图将新对象添加到数据库的代码:
using (var context = new ServiceJobbContext(_settingsService))
{
var current = await context.ServiceJobb.FirstOrDefaultAsync(c => c.jobb_key == serviceJobb.jobb_key);
if (current == null)
current = context.ServiceJobb.Add(serviceJobb);
else
{
current.service = serviceJobb.service;
current.sluttid = serviceJobb.sluttid;
current.starttid = serviceJobb.starttid;
current.jobb_key = serviceJobb.jobb_key;
}
await context.SaveChangesAsync();
return serviceJobb;
}
我已经检查了jobb_key的设置,但是在运行SaveChangesAsync时仍然出现此异常:
SqlException:无法将值NULL插入列'jobb_key', 表'MyDB.dbo.jobb';列不允许为空。 INSERT失败。的 语句已终止。
为什么会出现此异常?
答案 0 :(得分:1)
当您尝试在插入操作中向其插入空值时,您的键列[jobb_key] [int] NOT NULL
不为空,因此您应更改键字段以使其能够插入或使其身份自动插入。
因此在此语句中无法插入
current = context.ServiceJobb.Add(serviceJobb);
解决方案1:
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int jobb_key { get; set; }
明确插入它,因为默认情况下它是DatabaseGeneratedOption.Identity
,因此EF将其作为空传递
解决方案2:在数据库的级别表中使其标识
[jobb_key] [int] NOT NULL IDENTITY(1,1) ,
还要在EF中自动生成的属性中对此link进行检查
答案 1 :(得分:0)
将0 1 2 3 4 5 6 7 8 9 FOO BAR 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2
FOO BAR 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2
0 1 2 3 4 FOO BAR 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2
0 1 2 3 4 FOO BAR 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2
0 1 2 3 4 5 6 7 8 9 10 11 12 13 FOO BAR 14 15 16 17 18 19 20 21 22 FOO BAR 23 2
… 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 FOO BAR 35 36 37 38 39 40
… 23 24 25 26 27 28 29 30 31 32 33 34 FOO BAR 35 36 37 38 39 40 41 42 43 44 45 46
属性添加到[Required]
字段中,并将not null
添加到行版本中:
[DatabaseGenerated]
注意:ValueTypes隐含为public class Jobb
{
public DateTime? starttid { get; set; }
public DateTime? sluttid { get; set; }
[Timestamp]
[DatabaseGenerated]
public byte[] rowversion { get; set; }
[Required]
public string service { get; set; }
[Key]
public int jobb_key { get; set; }
}