无法在EF 6.1.3中将值NULL插入列中

时间:2016-02-19 22:22:13

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

我在SQL Server Management Studio中创建了一个包含两列的表,FacilityId是主键,而不是null。设计完成后,我手动添加了第一行。

但是,当我以编程方式在C#代码中将新记录插入表中时,我收到此错误:

  

无法将值NULL插入“FacilityId”列,表'xxxxxxxx';列不允许空值。

我的代码表:

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

那有什么不对?

修改

db / table结构。

facilityid

另外,我确实有提供的价值。

见图片:

ex

我确信身份属性已关闭。

3

EDIT2:

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'

2 个答案:

答案 0 :(得分:0)

数据库表中FacilityID的确切定义是什么?

是否将其定义为 IDENTITY 列(以使SQL Server自动分配值)?
如果是这样,那么您需要在EF模型中使用[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

如果 未定义为标识列,则在插入新行时必须提供值。

更新:如果该列不是标识列(似乎就是这种情况),我建议您完全删除{{1}您的模型类的属性:

[DatabaseGenerated(DatabaseGeneratedOption.None)]

答案 1 :(得分:0)

最后在团队成员的帮助下重新获得它。代码本身没有错。问题是我将项目开发为类库并将其添加到asp.net MVC应用程序中。 Web应用程序是DNX 4.5.1项目。因为我的原始dll有一些缺陷我相信,虽然我更新了它,DNX 4.5.1框架无法找到它。它总是看起来是缓存中的原始dll。

正确的操作是将dll推送到Nuget服务器,然后添加到Web应用程序。所以dll版本可以自动递增。

所以无论我播放什么属性,它都无法正常工作。希望在Visual Studio 2015发行版的下一个版本中,可以重新解决该问题。