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

标签 c# .net sql-server entity-framework

我在 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/

相关文章:

sql-server - SQL Server 查询 - 分组乘法

c# - WaveInEvent处理程序多久触发一次?

c# - Xamarin 中的自定义对话框宽度和高度

c# - 产品商标名称求同名类/ namespace

c# - 生成的代码 (xsd.exe) 的 SuppressMessage 编译器警告 CS1591

sql - 将数据库名称设置为 SQL 中的变量

sql-server - TSQL 按具有多个值的列进行分组

c# - "where T : class"在编译时或运行时没有以任何方式强制执行吗?

c# - GMap.Net Wpf 中的叠加层

c# - 在 Windows Phone WinRT/通用应用程序中手动触发 NavigationThemeTransition