gpt4 book ai didi

c# - 无法将值 NULL 插入 EF 6.1.3 中的列

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:24 24 4
gpt4 key购买 nike

我在 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; }
}

怎么了?

编辑:

数据库/表结构。

facilityid

另外,我确实有提供的值(value)。

看图:

ex

我确定标识属性已关闭。

3

编辑 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com