我在 SQL Server Management Studio 中创建了一个包含两列的表,FacilityId
是主键而不是 null。设计完成后,我手动添加了第一行。
但是,当我在 C# 代码中以编程方式将新记录插入表中时,出现此错误:
Cannot insert the value NULL into column 'FacilityId', table 'xxxxxxxx'; column does not allow nulls.
我的代码表:
public class MyURL
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Column("FacilityId")]
public int FacilityId { get; set; }
[Column("Url")]
public string Url { get; set; }
}
通过以下代码添加新记录:
public void AddNewUrl(int id, string url)
{
using (MyUrlContext context = new MyUrlContext())
{
context.Database.Connection.ConnectionString = GetConnectionString(context);
var data = GetNewUrl(id, url);
SaveContextAfterAddingNewRecord(context, data);
}
}
public virtual void SaveContextAfterAddingNewRecord(MyUrlContext context, MyURL data)
{
context.MyEndpoints.Add(data);
context.SaveChanges();
}
和
public class MyUrlContext : DbContext
{
public MyUrlContext():base()
{
Database.SetInitializer<MyUrlContext>(null);
}
public DbSet<MyURL> MyEndpoints { get; set; }
}
怎么了?
编辑:
数据库/表结构。
另外,我确实有提供的值(value)。
看图:
我确定标识属性已关闭。
编辑 2:
SS 分析器指出
exec sp_executesql N'INSERT [dbo].[TableName]([Url])
VALUES (@0)
SELECT [FacilityID]
FROM [dbo].[TableName]
WHERE @@ROWCOUNT > 0 AND [FacilityID] = scope_identity()',N'@0 nvarchar(max) ',@0=N'sdfsdf'
最佳答案
数据库表中 FacilityID
的确切定义是什么?
它是否定义为 IDENTITY
列(以使 SQL Server 自动分配值)?
如果是这样,那么您需要在 EF 模型中使用 [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
。
如果它未定义为标识列,那么您在插入新行时必须提供一个值。
更新:如果该列不是标识列(似乎是这种情况),我建议完全删除 [DatabaseGenerated( DatabaseGeneratedOption.None)]
模型类中的属性:
public class MyURL
{
[Key]
[Column("FacilityId")]
public int FacilityId { get; set; }
[Column("Url")]
public string Url { get; set; }
}
关于c# - 无法将值 NULL 插入 EF 6.1.3 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35516170/